Go基础知识-TCP/UDP

2022/3/4 23:21:23

本文主要是介绍Go基础知识-TCP/UDP,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!


1.网络编程:物理层->数据链路层->网络层->传输层->应用层

2.Socket是应用层与TCP/IP协议族通信的中间软件抽象层

3.TCP编程:net包里面,并且粘包的问题需要注意

      服务端处理流程:

   1.监听端口  2.接收客户端请求建立链接 3.创建goroutine处理链接

  客户端处理流程:

   1.建立与服务端连接 2. 收发数据 3.关闭连接

案例:

  服务端:

 

func main(){
   //1.监听端口:Listen
   listen,err := net.Listen("tcp","127.0.0.1:4567")
   if err != nil{
      fmt.Println("listen error:",err)
      return
   }
   defer listen.Close()
   fmt.Println("listen success")

   //接收客户端请求建立连接 Accept
   for{
      //建立连接
      conn,err := listen.Accept()
      if err != nil{
         fmt.Println("Accept error:",err)
         continue
      }
      fmt.Println("收到客户端连接进来=",conn.RemoteAddr().String())
      //接收数据
      go func(_conn net.Conn) {
            defer _conn.Close()
            for{
               reader := bufio.NewReader(_conn)
               var buf [128]byte
               n,err := reader.Read(buf[:])
               if err != nil{
                  fmt.Println("read err:",err)
               break
            }
            data := string(buf[:n])
            fmt.Println("receive data=",data)
            //给客户端发一条
            _conn.Write([]byte("已经收到这条消息"))
         }
      }(conn)

   }
}
//使用tcp工具发送
//结果如下:

listen success
收到客户端连接进来= 127.0.0.1:55559
receive data= 你哈啊
read err: read tcp 127.0.0.1:4567->127.0.0.1:55559: wsarecv: An existing connection was forcibly closed by the remote host.

   

    客户端:

func main(){
   //1.建立与服务端连接 2. 收发数据 3.关闭连接
   _conn,err := net.Dial("tcp","127.0.0.1:4567")
   if err != nil{
      fmt.Println("conn to server error:",err)
      return
   }
   defer _conn.Close()
   //2. 收发数据 Accept
   for i:=0;i<10;i++{
      //发送数据
      _,err = _conn.Write([]byte("你好server"))
      if err != nil{
         fmt.Println("send msg err=",err)
         return
      }
      //接收服务端数据
      var buf [128]byte
      n,err := _conn.Read(buf[:])
      if err != nil{
         fmt.Println("read server content error",err)
         return
      }
      fmt.Println("server msg=",string(buf[:n]))
   }

}

 

4.UDP编程:换个函数

 



这篇关于Go基础知识-TCP/UDP的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程