打印

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

[复制链接]
2504|21
手机看帖
扫描二维码
随时随地手机跟帖
沙发
keer_zu|  楼主 | 2016-12-28 20:32 | 只看该作者
server.go


/* UDPDaytimeServer
*/
package main

import (
        "fmt"
        "net"
        "os"
        "time"
)

func main() {

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

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

        for {
                handleClient(conn)
        }
}

func handleClient(conn *net.UDPConn) {

        var buf [512]byte

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

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

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

func checkError(err error) {
        if err != nil {
                fmt.Fprintf(os.Stderr, "Fatal error ", err.Error())
                os.Exit(1)
        }
}



使用特权

评论回复
板凳
keer_zu|  楼主 | 2016-12-28 20:33 | 只看该作者
client.go

package main

import (
        "net"
        "os"
        "fmt"
)

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

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

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

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

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

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

        os.Exit(0)
}

func checkError(err error) {
        if err != nil {
                fmt.Fprintf(os.Stderr, "Fatal error ", err.Error())
                os.Exit(1)
        }
}



使用特权

评论回复
地板
keer_zu|  楼主 | 2016-12-28 20:34 | 只看该作者
编译结果:

server和client

启动server端:  ./server
启动client端: ./client 127.0.0.1:1200

使用特权

评论回复
5
keer_zu|  楼主 | 2017-1-18 17:35 | 只看该作者
go就这么简单

使用特权

评论回复
6
doob| | 2017-1-20 15:18 | 只看该作者
牛啊,电子界大咖

使用特权

评论回复
7
keer_zu|  楼主 | 2017-1-24 09:27 | 只看该作者
doob 发表于 2017-1-20 15:18
牛啊,电子界大咖

过奖啊,这只是入门的东西啊。

使用特权

评论回复
8
renxiaolin| | 2017-1-24 11:12 | 只看该作者
keer_zu 发表于 2017-1-24 09:27
过奖啊,这只是入门的东西啊。

udp还有客户端跟服务器?

使用特权

评论回复
9
renxiaolin| | 2017-1-24 11:15 | 只看该作者
那次在csdn看到一个人细说go的种种缺点,心凉啦很多呀  

使用特权

评论回复
10
keer_zu|  楼主 | 2017-1-24 11:55 | 只看该作者
renxiaolin 发表于 2017-1-24 11:12
udp还有客户端跟服务器?

有的

使用特权

评论回复
11
keer_zu|  楼主 | 2017-1-24 11:56 | 只看该作者
renxiaolin 发表于 2017-1-24 11:15
那次在csdn看到一个人细说go的种种缺点,心凉啦很多呀

用用就知道啦,今年的表现证明一切。

使用特权

评论回复
12
renxiaolin| | 2017-1-24 12:00 | 只看该作者

udp是不分客户端跟服务器的,用udp,你只要知道对方的ip跟端口就OK,在发送跟接收双方的位置是一样的,你能说发送方是服务器或者接收方是服务器吗?
当然,你能用udp为底层实现一个服务器跟客户端通信的机制,但跟udp有服务器跟客户端的区分根本是两回事

使用特权

评论回复
13
renxiaolin| | 2017-1-24 17:18 | 只看该作者
yyy71cj 发表于 2017-1-24 16:57
udp应该是一种协议呀

udp是一种协议,没有客户端跟服务器之说

使用特权

评论回复
14
keer_zu|  楼主 | 2017-1-25 09:33 | 只看该作者
renxiaolin 发表于 2017-1-24 12:00
udp是不分客户端跟服务器的,用udp,你只要知道对方的ip跟端口就OK,在发送跟接收双方的位置是一样的,你 ...

好吧,监听端,主动链接端

使用特权

评论回复
15
renxiaolin| | 2017-1-25 12:05 | 只看该作者
keer_zu 发表于 2017-1-25 09:33
好吧,监听端,主动链接端

你说的是tcp,不是udp,呵呵

使用特权

评论回复
16
keer_zu|  楼主 | 2017-1-25 13:39 | 只看该作者
renxiaolin 发表于 2017-1-25 12:05
你说的是tcp,不是udp,呵呵

也是,udp是无连接的,一个监听端,一个请求端

使用特权

评论回复
17
keer_zu|  楼主 | 2017-1-25 13:40 | 只看该作者
renxiaolin 发表于 2017-1-25 12:05
你说的是tcp,不是udp,呵呵

也是,udp是无连接的,一个监听端,一个请求端

使用特权

评论回复
18
renxiaolin| | 2017-1-25 15:09 | 只看该作者
keer_zu 发表于 2017-1-25 13:40
也是,udp是无连接的,一个监听端,一个请求端

对于udp协议没有监听一说,要说监听就是tcp的服务器端

使用特权

评论回复
19
lxyppc| | 2017-2-21 11:42 | 只看该作者
keer_zu 发表于 2017-1-25 13:40
也是,udp是无连接的,一个监听端,一个请求端

他的意思是
udp不分客户端和服务端
要用udp发数据的时候
只需要掐指一算,便能得到一个端口号
然后发过去就能收到了

使用特权

评论回复
20
renxiaolin| | 2017-2-21 13:54 | 只看该作者
lxyppc 发表于 2017-2-21 11:42
他的意思是
udp不分客户端和服务端
要用udp发数据的时候

那凭你的智商,能理解到这程度也不容易呀,哈哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1350

主题

12427

帖子

53

粉丝