• 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 }
  • 相关阅读:
    Naive Operations HDU6315 (杭电多校2G)
    Baker Vai LightOJ
    LOJ#6278. 数列分块入门 2
    LOJ#6277. 数列分块入门 1
    Picture POJ
    Who Gets the Most Candies? POJ
    Dividing the Path POJ
    Balanced Sequence HDU
    归并排序
    Flying to the Mars
  • 原文地址:https://www.cnblogs.com/chaoyangxu/p/12176657.html
Copyright © 2020-2023  润新知