作者:,,,,,,,,,,,,,,, | 来源:互联网 | 2023-09-25 14:56
实现简单的tcp服务
package main
import (
“fmt”
“net”
)
func main() {
fmt.Println(“服务器开始监听..”)
// Listen创建网络监听
listen, err := net.Listen(“tcp”, “127.0.0.1:9999”)
defer listen.Close()
if err != nil {
fmt.Println(“listen err=,”, err)
return
}
for {
fmt.Println(“等待客户端连接….”)
// Accept等待并返回下一个连接到该接口的连接,返回一个通用的网络链接
conn, err := listen.Accept()
if err != nil {
fmt.Println(“accpet error: “, err)
}
//conn.RemoteAddr()返回远端网络地址 String():返回字符串格式的地址
fmt.Println(“accpet connect: “, conn.RemoteAddr().String())
}
}
![](https://www.cnbiancheng.com/wp-content/uploads/8a5da56d2e486a944381f6a66204979d.webp)
是客户端连接服务端,实现以下功能
1. 编写一个客户端端程序,能链接到服务器端监听的端口
2. 客户端可以发送单行数据,然后退出
3. 能通过终端输入数据(输入一行发送一行),并发送给服务器端。
4.在终端输入exit,表示退出程序.
package main
import (
“fmt”
“net”
)
func procs(conn net.Conn) {
defer conn.Close()
for {
byt := make([]byte, 512)
fmt.Printf(“wait %s send data
“, conn.RemoteAddr().String())
len, err := conn.Read(byt) //从conn中读取byte,会如果不发数据会阻塞
if err != nil {
fmt.Println(“server err:”, err)
return
}
fmt.Println(string(byt[:len]))
}
}
func main() {
fmt.Println(“服务器开始监听..”)
// Listen创建网络监听
listen, err := net.Listen(“tcp”, “127.0.0.1:9999”)
defer listen.Close()
if err != nil {
fmt.Println(“listen err=”, err)
return
}
for {
fmt.Println(“等待客户端连接….”)
// Accept等待并返回下一个连接到该接口的连接,返回一个通用的网络链接
conn, err := listen.Accept()
if err != nil {
fmt.Println(“accpet error: “, err)
}
//conn.RemoteAddr()返回远端网络地址 String():返回字符串格式的地址
fmt.Println(“accpet connect: “, conn.RemoteAddr().String())
go procs(conn)
}
}
package main
import (
“bufio”
“fmt”
“net”
“os”
)
func main() {
// 连接服务端
conn, err := net.Dial(“tcp”, “127.0.0.1:9999”)
if err != nil {
fmt.Println(“conn err: “, err)
}
fmt.Println(“成功:”, conn)
//向服务器发送数据。
reader := bufio.NewReader(os.Stdin)
// 返回第一次遇到
的所有数据,byte
str, err := reader.ReadString(”
“)
if err != nil {
fmt.Println(“reader fail: “, err)
}
len, err := conn.Write([]byte(str))
if err != nil {
fmt.Println(“send data fail: “, err)
}
fmt.Printf(“客户端发送了%d自己后退出”, len)
}
![](https://www.cnbiancheng.com/wp-content/uploads/e91b810333e6f573f01f080e24493d4c.webp)