如何将网站让百度收录,辽宁建设工程信息网招标,中国化工建设公司官网,网站源码分享网1、TCP编程
1.1.1 Go语言实现TCP通信
TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议#xff0c;是一种面向连接#xff08;连接导向#xff09;的、可靠的、基于字节流的传输层#xff08;Transport layer#xff09;通信协…1、TCP编程
1.1.1 Go语言实现TCP通信
TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议是一种面向连接连接导向的、可靠的、基于字节流的传输层Transport layer通信协议因为是面向连接的协议数据像水流一样传输会存在黏包问题。
TCP服务端 一个TCP服务端可以同时连接很多个客户端例如世界各地的用户使用自己电脑上的浏览器访问淘宝网。因为Go语言中创建多个goroutine实现并发非常方便和高效所以我们可以每建立一次链接就创建一个goroutine去处理。
TCP服务端程序的处理流程 1.监听端口
2.接收客户端请求建立链接
3.创建goroutine处理链接。我们使用Go语言的net包实现的TCP服务端代码如下
// tcp/server/main.go// TCP server端// 处理函数
func process(conn net.Conn) {defer conn.Close() // 关闭连接for {reader : bufio.NewReader(conn)var buf [128]byten, err : reader.Read(buf[:]) // 读取数据if err ! nil {fmt.Println(read from client failed, err:, err)break}recvStr : string(buf[:n])fmt.Println(收到client端发来的数据, recvStr)conn.Write([]byte(recvStr)) // 发送数据}
}func main() {listen, err : net.Listen(tcp, 127.0.0.1:20000)if err ! nil {fmt.Println(listen failed, err:, err)return}for {conn, err : listen.Accept() // 建立连接if err ! nil {fmt.Println(accept failed, err:, err)continue}go process(conn) // 启动一个goroutine处理连接}
}将上面的代码保存之后编译成server或server.exe可执行文件。
TCP客户端 一个TCP客户端进行TCP通信的流程如下 1.建立与服务端的链接
2.进行数据收发
3.关闭链接使用Go语言的net包实现的TCP客户端代码如下
// tcp/client/main.go// 客户端
func main() {conn, err : net.Dial(tcp, 127.0.0.1:20000)if err ! nil {fmt.Println(err :, err)return}defer conn.Close() // 关闭连接inputReader : bufio.NewReader(os.Stdin)for {input, _ : inputReader.ReadString(\n) // 读取用户输入inputInfo : strings.Trim(input, \r\n)if strings.ToUpper(inputInfo) Q { // 如果输入q就退出return}_, err conn.Write([]byte(inputInfo)) // 发送数据if err ! nil {return}buf : [512]byte{}n, err : conn.Read(buf[:])if err ! nil {fmt.Println(recv failed, err:, err)return}fmt.Println(string(buf[:n]))}
}将上面的代码编译成client或client.exe可执行文件先启动server端再启动client端在client端输入任意内容回车之后就能够在server端看到client端发送的数据从而实现TCP通信。