server端:
package main import ( "fmt" "net" ) func main() { //建立监听 listener, err := net.Listen("tcp", "localhost:8080") if err != nil{ fmt.Println("建立tcp监听失败,err=",err) return } defer func() { listener.Close() fmt.Println("服务器已关闭") }() fmt.Println("正在监听客户请求") for { //循环接入一个客户端(获得专线连接Conn) conn, _ := listener.Accept() fmt.Println("成功接入客户端:",conn.RemoteAddr()) //将接入的客户端丢到并发协程中进行处理 go func() { /*在一个独立的并发任务中与当前客户端IO*/ for { //在专线连接中与特定的客户端IO buffer := make([]byte, 1024) n, _ := conn.Read(buffer) msg := string(buffer[:n]) fmt.Printf("客户端%v:%s\n",conn.RemoteAddr(),msg) //回复消息 conn.Write([]byte("已阅消息:"+ msg)) //判断客户端是否想离婚 if msg == "exit"{ //断开与客户端的链接 conn.Close() break } } }() } }
client端:
package main import ( "fmt" "net" ) func main() { //使用udp协议拨号,远程地址127.0.0.1:8080 conn, _ := net.Dial("tcp", "127.0.0.1:8080") //程序退出前关闭连接,释放io资源 defer func() { conn.Close() fmt.Println("客户端已退出") }() //创建接收消息的缓冲区 buffer := make([]byte, 1024) //用户要发送的消息文本 var userInput string for{ //接收用户输入 fmt.Print("大神请输入:") fmt.Scan(&userInput) //如果用户输入exit则退出 //客户端发起交谈 conn.Write([]byte(userInput)) //接收服务端消息 n, err := conn.Read(buffer) fmt.Println(err) fmt.Println("服务端:"+string(buffer[:n])) if userInput == "exit"{ break } } }
原文:https://www.cnblogs.com/yunweiqiang/p/12727600.html