Socket.Receive(byte [])会返回一个UDP数据包吗?

时间:2012-03-11 05:35:18

标签: .net sockets udp

我有这样的插座:

s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

当我打电话时,我是否正确

s.Receive(byte[]);

我收到一个数据报?我需要逐个处理数据报。

2 个答案:

答案 0 :(得分:2)

它将返回最多一个 UDP数据包。 (如果有人认为异常会导致“不返回任何内容”。)

Socket.Recieve documentation个州(在备注部分):

  

如果您使用的是无连接套接字,接收将读取您在Connect方法中指定的目标地址第一个排队数据报。

但请注意以下句子:

  

如果您收到的数据报大于缓冲区参数的大小,缓冲区将填充消息的第一部分,多余的数据将丢失并抛出SocketException。

调用也可能在超时或非阻塞模式下没有可用数据时抛出异常等。

快乐的编码。

答案 1 :(得分:1)

是的,你会的。使这成为可能的UDP的特定功能称为Message Boundary Preservation.

如果你的意思是one by one可靠地按顺序,你必须记住UDP也不保证。有关详细信息,请参阅this文章