【问题标题】:UDP Socket returns part of packetUDP Socket 返回部分数据包
【发布时间】:2013-11-23 11:56:08
【问题描述】:

信息:我正在开发一个 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 作为从套接字读取的数据计数。

【问题讨论】:

  • @ShahroozJefriㇱ 现在好点了吗?
  • @ShahroozJefriㇱ 上面写的数据计数错误,这是我的错误。
  • 我不知道你的问题是什么,但请看stackoverflow.com/questions/2069068/…

标签: c# network-programming udp


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多