TCP通信功能 (就是agent功能)
结果
clent
server
服务器端
1 package main 2 3 import ( 4 "net" 5 "fmt" 6 "os" 7 ) 8 9 10 func ServerHandleError(err error,when string) { 11 if err != nil { 12 fmt.Println(err, "net.Listen") 13 os.Exit(1) 14 15 } 16 } 17 18 19 func main(){ 20 21 22 //创建链接 23 listener, err := net.Listen("tcp", "127.0.0.1:8080") 24 ServerHandleError(err,"net.Listen") 25 26 //循环接入所有客户端,得到专线链接 27 for{ 28 conn, e := listener.Accept() 29 ServerHandleError(e,"listener.Accept()") 30 31 //开辟一条独立携程,与该客户端聊天 32 go ChatWith(conn) 33 34 } 35 } 36 37 //在专线中与客户端对话 38 func ChatWith(conn net.Conn) { 39 40 //创建一个消息缓冲区,创建个桶 41 buffer := make([]byte, 1024) 42 43 44 //一个完整的消息回合 45 for{ 46 47 //先听他说什么,读取客户端发来的消息,存入缓冲区 48 n, err := conn.Read(buffer) 49 ServerHandleError(err,"conn.Read(buffer)") 50 51 //拿桶接收,消息,转换打印出来 52 clientMsg := string(buffer[0:n]) 53 fmt.Printf("收到%v的消息: %s ",conn.RemoteAddr(),clientMsg) 54 55 //如果信息里包含off 便断开会话 56 if clientMsg!="off"{ 57 //在回复他 已阅,自动回复客户端消息 58 conn.Write([]byte("已阅:"+clientMsg)) 59 }else { 60 conn.Write([]byte("拜拜:"+clientMsg)) 61 break 62 } 63 64 65 } 66 //断开客户端链接 67 conn.Close() 68 fmt.Printf("客户端: %s 已经断开链接..",conn.RemoteAddr()) 69 70 }
客户端
1 package main 2 3 import ( 4 "net" 5 "fmt" 6 "os" 7 "bufio" 8 ) 9 10 11 12 func ClentHandleError(err error,when string) { 13 if err != nil { 14 fmt.Println(err, "net.Listen") 15 os.Exit(1) 16 17 } 18 } 19 20 21 22 23 24 func main() { 25 26 //拨号远程地址,建立tcp远程链接 27 conn, err := net.Dial("tcp", "127.0.0.1:8080") 28 ClentHandleError(err,"net.Dial") 29 30 //准备消息缓冲区 31 buffer := make([]byte, 1024) 32 33 34 //建议标准输入的读取器(就是从命令行读取用户输入) 35 reader := bufio.NewReader(os.Stdin) 36 37 38 //源源不断的收发消息 39 for { 40 41 //一个完整的消息回合 42 //接收命令行输入,每行消息 43 lineBytes, _, _ := reader.ReadLine() 44 45 //向服务断发送 46 conn.Write(lineBytes) 47 48 //接收服务端消息,存入消息缓冲区,长度是n字节,转换成字符串并且打印 49 n, err := conn.Read(buffer) 50 ClentHandleError(err,"conn.Read") 51 serverMsg := string(buffer[0:n]) 52 fmt.Println("服务器: ",serverMsg) 53 54 //如果客户端说bye 就退出消息循环 55 if serverMsg=="bye"{ 56 break 57 } 58 59 } 60 fmt.Println("GAME OVER!") 61 }