TCP Server and Client Demo
2022/4/14 6:17:01
本文主要是介绍TCP Server and Client Demo,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
server.go
package main import ( "bufio" "fmt" "io" "net" "time" ) func tcpPipe(conn *net.TCPConn) { ipStr := conn.RemoteAddr().String() defer func() { fmt.Println("Disconnected:" + ipStr) conn.Close() }() reader := bufio.NewReader(conn) i := 0 for { message, err := reader.ReadString('\n') if err != nil || err == io.EOF { break } fmt.Println(string(message)) time.Sleep(time.Second * 1) msg := time.Now().String() + conn.RemoteAddr().String() + "Server Say Hello!\n" b := []byte(msg) conn.Write(b) i++ if i > 10 { break } } } // 服务端代码 func main() { var tcpAddr *net.TCPAddr tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:9999") tcpListener, _ := net.ListenTCP("tcp", tcpAddr) defer tcpListener.Close() fmt.Println("Server ready to read ...") for { tcpConn, err := tcpListener.AcceptTCP() if err != nil { fmt.Println("accept error:", err) continue } fmt.Println("A client connected:" + tcpConn.RemoteAddr().String()) // 每来一个连接就开启一个协程来管理 go tcpPipe(tcpConn) } }
client.go
package main import ( "bufio" "fmt" "io" "net" "time" ) func main() { var tcpAddr *net.TCPAddr tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:9999") conn, err := net.DialTCP("tcp", nil, tcpAddr) if err != nil { fmt.Println("Client connect error!" + err.Error()) return } defer conn.Close() fmt.Println(conn.LocalAddr().String() + ":Client connected!") onMessageRecived(conn) } func onMessageRecived(conn *net.TCPConn) { reader := bufio.NewReader(conn) b := []byte(conn.LocalAddr().String() + "Say hello to Server...\n") conn.Write(b) for { msg, err := reader.ReadString('\n') fmt.Println("ReadString") fmt.Println(msg) if err != nil || err == io.EOF { fmt.Println(err) break } time.Sleep(time.Second * 2) fmt.Println("writing....") b := []byte(conn.LocalAddr().String() + "write data to Server...\n") _, err = conn.Write(b) if err != nil { fmt.Println(err) break } } }
这篇关于TCP Server and Client Demo的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版