在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/GO/ UDP是無(wú)連接協(xié)議,為什么Golang里面還有net.DialUDP方法?

UDP是無(wú)連接協(xié)議,為什么Golang里面還有net.DialUDP方法?

socket, err := net.DialUDP("udp4", nil, &net.UDPAddr{
    IP:   net.IPv4(192, 168, 1, 103),
    Port: 8080,
})

換句話說(shuō),給UDP服務(wù)端發(fā)信息不是應(yīng)該直接調(diào)用一個(gè)send方法,在send方法里面提供目標(biāo)服務(wù)端的IP和端口就好了嘛,就像C#里面socket對(duì)象的SendTo方法一樣,為什么Golang的API設(shè)計(jì)的這么奇怪。

另外就是以golang為例,UDP如果是無(wú)連接的,那么服務(wù)端該如何向內(nèi)網(wǎng)的客戶端主動(dòng)推消息呢?是不是客戶端得先主動(dòng)連上,然后服務(wù)端就開(kāi)始阻塞,等到有消息需要推給客戶端之后之后再調(diào)用socket.WriteToUDP嗎?

回答
編輯回答
掛念你

udp是無(wú)連接的,但是得指定接受方,dial只是為了抽象,并不是建立了連接

2017年9月7日 19:54
編輯回答
選擇

多數(shù)時(shí)候消息并不是發(fā)完就完了啊,還要在本地分配的端口上收消息。DialUDP主要就是為了綁定一個(gè)scoket,為后續(xù)在同一個(gè)端口上收發(fā)消息保存一個(gè)上下文。有無(wú)連接是說(shuō)傳輸層能否保證消息的可靠性,但端口收到的消息應(yīng)該往哪個(gè)進(jìn)程上傳遞總還是得知道的。tcp靠三次握手,udp就只有先發(fā)個(gè)包了

2018年9月16日 17:46
編輯回答
陪她鬧

首先你得明白UDP中connect函數(shù)和bind函數(shù)作用.
在golang中的UDPConn分為connected和unconnected.
如果*UDPConn是connected,讀寫方法是Read和Write。
如果*UDPConn是unconnected,讀寫方法是ReadFromUDP和WriteToUDP(以及ReadFrom和WriteTo)。
DialUDP中的UDPConn為connected是不能調(diào)用WriteToUDP發(fā)送給某個(gè)地址.
ListenUDP中的UDPCon為unconnected,直接可以調(diào)用WriteToUDP發(fā)送給某個(gè)地址.
Go的這種設(shè)計(jì)和Unix/Linux設(shè)計(jì)一致,這里可以參考Linux中的UDP文檔.
http://man7.org/linux/man-pag...

2018年5月13日 22:13