UDP套接字返回数据包的一部分

时间:2013-11-23 11:56:09

标签: c# network-programming udp

信息:我正在开发VOIP应用程序。

我使用C#Socket类并将其作为UDP套接字初始化。

我的接收代码:

if(socket.Poll(-1,SelectMode.SelectRead)){
    if(!socket.Connected){
        return;
    }
    Console.WriteLine(" AVAIL:"+socket.Available);
    int count = socket.ReceiveFrom (data, ref endpoint);
    Console.WriteLine("LENGTH:"+count);
    receivedEvent.Reuse (socket, data, count, (IPEndPoint)endpoint);
    receivedFunction (receivedEvent);
}

我的发送代码:

int cnt = socket.SendTo (data, length, SocketFlags.None, ep);
if (cnt != length) {
   //LOG STUFF
}
if (sendEvent != null) {
    sendEvent (cnt);
}

错误: 我从我的udp套接字获得意外数据,这意味着即时发送约100个字节的数据,但我只收到31个。这是错误的=>我以为UDP总会给我全部或全部。我错了吗?

所以我的问题是,UDP在数据包意义上是否应该可靠?就像我只应该获得有效或无包?

我似乎遇到的另一个问题(不确定它是否与我当前的问题有关?),大约30分钟后,我的套接字只返回10作为从套接字读取的数据的数量。

1 个答案:

答案 0 :(得分:0)

  

所以我的问题是,UDP在数据包意义上是否应该可靠?   就像我只应该获得有效或无包?

否,除非您使用UDP校验和,否则使用原始套接字?

  

错误:我从udp套接字获取意外数据,这意味着即时发送   ~100字节的数据,但我只收到31.哪个是错的=>一世   以为UDP总会给我全部或全部。我错了吗?

您是否停用了IP碎片? https://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.dontfragment%28v=vs.110%29.aspx