目前我正在开发一个项目,我必须通过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数组由另一个线程处理,但这不是主题。
问题在于我的套接字有时会从两个中接收一个数据包,而在每个数据包中有一个接收到一个数据包。事实上它是随机的。
我在不同的论坛中看到了这种问题,但我找不到任何解决方案来解决我的问题。
我还试图为侦听线程设置更好的优先级,而对其他线程设置较低的优先级,但没有奏效。我试过的最后一件事是在收到数据后减少指令数,看看进程持续时间是否是数据包丢失的原因,但这也没有用。
提前感谢您的时间!