UDP套接字未接收所有数据包

时间:2017-02-16 09:14:13

标签: c# multithreading sockets udp

目前我正在开发一个项目,我必须通过C#构建一个带有.NET的RTP客户端和服务器。目前的问题涉及客户方面。

我创建了一个UDP Socket,如下所示,用于监听服务器:

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

我还创建了一个字节数组来存储接收到的字节:

byte[] RTPBuffer = new byte[1500];

大小是1500,因为在使用wireshark进行数据包分析后,我看到VLC发送的最大数据包大小为1428.之后我为监听过程创建了一个线程,该线程包含以下指令:

 while(!Disposing)
 {
     RTPSocket.Receive(RTPBuffer);

     OnRTPDataReceived(RTPBuffer);
 }

OnRTPDataReceived指令引发一个由以下方法处理的事件:

    public void RTPPacketReceived(object sender, byte[] packet)
    {
        PacketQueue.Enqueue(packet);
    }

最后,PacketQueue Queue中包含的bytes数组由另一个线程处理,但这不是主题。

问题在于我的套接字有时会从两个中接收一个数据包,而在每个数据包中有一个接收到一个数据包。事实上它是随机的。

我在不同的论坛中看到了这种问题,但我找不到任何解决方案来解决我的问题。

我还试图为侦听线程设置更好的优先级,而对其他线程设置较低的优先级,但没有奏效。我试过的最后一件事是在收到数据后减少指令数,看看进程持续时间是否是数据包丢失的原因,但这也没有用。

提前感谢您的时间!

0 个答案:

没有答案