一个简单的go语言udp通信程序。

[复制链接]
 楼主| keer_zu 发表于 2016-12-28 20:31 | 显示全部楼层 |阅读模式
server和client分别编译:
go build server.go
go build client.go

 楼主| keer_zu 发表于 2016-12-28 20:32 | 显示全部楼层
server.go


  1. /* UDPDaytimeServer
  2. */
  3. package main

  4. import (
  5.         "fmt"
  6.         "net"
  7.         "os"
  8.         "time"
  9. )

  10. func main() {

  11.         service := ":1200"
  12.         udpAddr, err := net.ResolveUDPAddr("udp4", service)
  13.         checkError(err)

  14.         conn, err := net.ListenUDP("udp", udpAddr)
  15.         checkError(err)

  16.         for {
  17.                 handleClient(conn)
  18.         }
  19. }

  20. func handleClient(conn *net.UDPConn) {

  21.         var buf [512]byte

  22.         _, addr, err := conn.ReadFromUDP(buf[0:])
  23.         if err != nil {
  24.                 return
  25.         }

  26.         daytime := time.Now().String()

  27.         conn.WriteToUDP([]byte(daytime), addr)
  28. }

  29. func checkError(err error) {
  30.         if err != nil {
  31.                 fmt.Fprintf(os.Stderr, "Fatal error ", err.Error())
  32.                 os.Exit(1)
  33.         }
  34. }



 楼主| keer_zu 发表于 2016-12-28 20:33 | 显示全部楼层
client.go

  1. package main

  2. import (
  3.         "net"
  4.         "os"
  5.         "fmt"
  6. )

  7. func main() {
  8.         if len(os.Args) != 2 {
  9.                 fmt.Fprintf(os.Stderr, "Usage: %s host:port", os.Args[0])
  10.                 os.Exit(1)
  11.         }
  12.         service := os.Args[1]

  13.         udpAddr, err := net.ResolveUDPAddr("udp4", service)
  14.         checkError(err)

  15.         conn, err := net.DialUDP("udp", nil, udpAddr)
  16.         checkError(err)

  17.         _, err = conn.Write([]byte("anything"))
  18.         checkError(err)

  19.         var buf [512]byte
  20.         n, err := conn.Read(buf[0:])
  21.         checkError(err)

  22.         fmt.Println(string(buf[0:n]))

  23.         os.Exit(0)
  24. }

  25. func checkError(err error) {
  26.         if err != nil {
  27.                 fmt.Fprintf(os.Stderr, "Fatal error ", err.Error())
  28.                 os.Exit(1)
  29.         }
  30. }



 楼主| keer_zu 发表于 2016-12-28 20:34 | 显示全部楼层
编译结果:

server和client

启动server端:  ./server
启动client端: ./client 127.0.0.1:1200
 楼主| keer_zu 发表于 2017-1-18 17:35 来自手机 | 显示全部楼层
go就这么简单
doob 发表于 2017-1-20 15:18 | 显示全部楼层
牛啊,电子界大咖
 楼主| keer_zu 发表于 2017-1-24 09:27 | 显示全部楼层
doob 发表于 2017-1-20 15:18
牛啊,电子界大咖

过奖啊,这只是入门的东西啊。
renxiaolin 发表于 2017-1-24 11:12 | 显示全部楼层
keer_zu 发表于 2017-1-24 09:27
过奖啊,这只是入门的东西啊。

udp还有客户端跟服务器?
renxiaolin 发表于 2017-1-24 11:15 | 显示全部楼层
那次在csdn看到一个人细说go的种种缺点,心凉啦很多呀  
 楼主| keer_zu 发表于 2017-1-24 11:55 | 显示全部楼层
renxiaolin 发表于 2017-1-24 11:12
udp还有客户端跟服务器?

有的
 楼主| keer_zu 发表于 2017-1-24 11:56 | 显示全部楼层
renxiaolin 发表于 2017-1-24 11:15
那次在csdn看到一个人细说go的种种缺点,心凉啦很多呀

用用就知道啦,今年的表现证明一切。
renxiaolin 发表于 2017-1-24 12:00 | 显示全部楼层

udp是不分客户端跟服务器的,用udp,你只要知道对方的ip跟端口就OK,在发送跟接收双方的位置是一样的,你能说发送方是服务器或者接收方是服务器吗?
当然,你能用udp为底层实现一个服务器跟客户端通信的机制,但跟udp有服务器跟客户端的区分根本是两回事
renxiaolin 发表于 2017-1-24 17:18 | 显示全部楼层
yyy71cj 发表于 2017-1-24 16:57
udp应该是一种协议呀

udp是一种协议,没有客户端跟服务器之说
 楼主| keer_zu 发表于 2017-1-25 09:33 | 显示全部楼层
renxiaolin 发表于 2017-1-24 12:00
udp是不分客户端跟服务器的,用udp,你只要知道对方的ip跟端口就OK,在发送跟接收双方的位置是一样的,你 ...

好吧,监听端,主动链接端
renxiaolin 发表于 2017-1-25 12:05 | 显示全部楼层
keer_zu 发表于 2017-1-25 09:33
好吧,监听端,主动链接端

你说的是tcp,不是udp,呵呵
 楼主| keer_zu 发表于 2017-1-25 13:39 | 显示全部楼层
renxiaolin 发表于 2017-1-25 12:05
你说的是tcp,不是udp,呵呵

也是,udp是无连接的,一个监听端,一个请求端
 楼主| keer_zu 发表于 2017-1-25 13:40 | 显示全部楼层
renxiaolin 发表于 2017-1-25 12:05
你说的是tcp,不是udp,呵呵

也是,udp是无连接的,一个监听端,一个请求端
renxiaolin 发表于 2017-1-25 15:09 | 显示全部楼层
keer_zu 发表于 2017-1-25 13:40
也是,udp是无连接的,一个监听端,一个请求端

对于udp协议没有监听一说,要说监听就是tcp的服务器端
lxyppc 发表于 2017-2-21 11:42 来自手机 | 显示全部楼层
keer_zu 发表于 2017-1-25 13:40
也是,udp是无连接的,一个监听端,一个请求端

他的意思是
udp不分客户端和服务端
要用udp发数据的时候
只需要掐指一算,便能得到一个端口号
然后发过去就能收到了
renxiaolin 发表于 2017-2-21 13:54 | 显示全部楼层
lxyppc 发表于 2017-2-21 11:42
他的意思是
udp不分客户端和服务端
要用udp发数据的时候

那凭你的智商,能理解到这程度也不容易呀,哈哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1477

主题

12909

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部

1477

主题

12909

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部