Golang实现UDP Server

筑梦攻城狮 · · 3019 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


Server端

1、net.ListenUDP() 监听UDP服务

2、net.UDPConn.ReadFromUDP()  循环读取数据 

3、net.UDPConn.WriteToUDP() 写数据

package main

import (
   "fmt"
   "log"
   "net"
)

func main() {
   // 监听UDP服务
   udpConn,err := net.ListenUDP("udp",&net.UDPAddr{
      IP: net.IPv4(0,0,0,0),
      Port: 9090,
   })

   if err != nil{
      log.Fatal("Listen failed,",err)
      return
   }

   // 循环读取消息
   for {
      var data [1024]byte
      n,addr,err := udpConn.ReadFromUDP(data[:])
      if err != nil{
         log.Printf("Read from udp server:%s failed,err:%s",addr,err)
         break
      }
      go func() {
         // 返回数据
         fmt.Printf("Addr:%s,data:%v count:%d \n",addr,string(data[:n]),n)
         _,err := udpConn.WriteToUDP([]byte("msg recived."),addr)
         if err != nil{
            fmt.Println("write to udp server failed,err:",err)
         }
      }()
   }
}


Client端

1、net.Dial() 建立连接

2、net.UDPConn.Write() 写数据

3、net.UDPConn.ReadFromUDP() 回复数据

package main

import (
   "fmt"
   "log"
   "net"
)

func main() {
   // 连接服务器
   conn,err := net.DialUDP("udp",nil,&net.UDPAddr{
      IP: net.IPv4(127,0,0,1),
      Port: 9090,
   })

   if err != nil {
      log.Println("Connect to udp server failed,err:",err)
      return
   }


   for i:=0;i<10;i++{
      // 发送数据
      _,err := conn.Write([]byte(fmt.Sprintf("udp testing:%v",i)))
      if err != nil {
         fmt.Printf("Send data failed,err:",err)
         return
      }

      //接收数据
      result := make([]byte,1024)
      n,remoteAddr,err := conn.ReadFromUDP(result)
      if err != nil{
         fmt.Printf("Read from udp server failed ,err:",err)
         return
      }
      fmt.Printf("Recived msg from %s, data:%s \n",remoteAddr,string(result[:n]))
   }
}



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:筑梦攻城狮

查看原文:Golang实现UDP Server

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3019 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传