TCP通信功能 (agent功能)

 

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 }
原文地址:https://www.cnblogs.com/chaoyangxu/p/12176657.html