我有这样的插座:
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
当我打电话时,我是否正确
s.Receive(byte[]);
我收到一个数据报?我需要逐个处理数据报。
答案 0 :(得分:2)
它将返回最多一个 UDP数据包。 (如果有人认为异常会导致“不返回任何内容”。)
Socket.Recieve documentation个州(在备注部分):
如果您使用的是无连接套接字,接收将读取您在Connect方法中指定的目标地址的第一个排队数据报。
但请注意以下句子:
如果您收到的数据报大于缓冲区参数的大小,缓冲区将填充消息的第一部分,多余的数据将丢失并抛出SocketException。
调用也可能在超时或非阻塞模式下没有可用数据时抛出异常等。
快乐的编码。
答案 1 :(得分:1)
是的,你会的。使这成为可能的UDP的特定功能称为Message Boundary Preservation.
如果你的意思是one by one
,可靠地和按顺序,你必须记住UDP也不保证。有关详细信息,请参阅this文章