socket, err := net.DialUDP("udp4", nil, &net.UDPAddr{
IP: net.IPv4(192, 168, 1, 103),
Port: 8080,
})
换句话说,给UDP服务端发信息不是应该直接调用一个send方法,在send方法里面提供目标服务端的IP和端口就好了嘛,就像C#里面socket对象的SendTo方法一样,为什么Golang的API设计的这么奇怪。
另外就是以golang为例,UDP如果是无连接的,那么服务端该如何向内网的客户端主动推消息呢?是不是客户端得先主动连上,然后服务端就开始阻塞,等到有消息需要推给客户端之后之后再调用socket.WriteToUDP吗?
首先你得明白UDP中connect函数和bind函数作用.
在golang中的UDPConn分为connected和unconnected.
如果*UDPConn是connected,读写方法是Read和Write。
如果*UDPConn是unconnected,读写方法是ReadFromUDP和WriteToUDP(以及ReadFrom和WriteTo)。
DialUDP中的UDPConn为connected是不能调用WriteToUDP发送给某个地址.
ListenUDP中的UDPCon为unconnected,直接可以调用WriteToUDP发送给某个地址.
Go的这种设计和Unix/Linux设计一致,这里可以参考Linux中的UDP文档.
http://man7.org/linux/man-pag...