我有這樣的插座:請問Socket.Receive(byte [])是否只返回一個UDP數據包?
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
我是正確的,那麼,當我打電話
s.Receive(byte[]);
我正好收到一個數據包?我需要逐個處理數據報。
我有這樣的插座:請問Socket.Receive(byte [])是否只返回一個UDP數據包?
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
我是正確的,那麼,當我打電話
s.Receive(byte[]);
我正好收到一個數據包?我需要逐個處理數據報。
它將返回最多一個 UDP數據包。 (如果一個人認爲,一個異常導致「不返回任何東西」。)
的Socket.Recieve documentation狀態(備註部分):
如果您使用的是無連接的插座,接收將讀取第一個來自您在Connect方法中指定的目標地址的排隊數據報。
但是,請注意下面的句子:
如果收到數據報比緩衝參數的大小,緩存被裝滿消息的第一部分,多餘的數據丟失並拋出SocketException。
呼叫也可以扔在超時的異常或當不存在在非阻塞模式可用的數據,等等
編碼愉快。
是的,你會的。使這一切成爲可能UDP的具體功能被稱爲Message Boundary Preservation.
如果one by one
你的意思是,可靠和爲了,必須記住,UDP不保證任何負擔。有關更多信息,請參閱this文章