【发布时间】:2011-04-28 20:39:52
【问题描述】:
大家好。我在使用 c# 时遇到问题,很可能是调试器,但我对 c# 相当陌生(对 c/c++ 不是新手)
下面有代码。这是我遇到的问题。
我得到了 UDP,当然不能保证交付。如果我将管道塞满,我希望偶尔的数据包会在网络上或 Windows 上被丢弃。但是,我遇到的问题是,在创建新套接字后,我尝试发送一个包含 1 个字节数据的数据包。该数据包被丢弃。我可以尝试发送两次,两次都掉线了。但是,如果我发送价值 1k 的数据,它就会通过。如果我创建另一个套接字(通过再次单击按钮),一切正常。现在这是奇怪的事情。如果我停止并重新开始调试项目而不对源进行任何更改,我的所有数据包都会毫无问题地发送。它似乎只发生在项目构建后的第一次运行中。无论如何,这是重现该问题的代码。经过几个小时的搜索和阅读,我不知所措。 编辑:想澄清我正在使用wireshark并且可以看到数据包被丢弃了。
private void button1_Click(object sender, EventArgs e)
{
byte[] a = new byte[1] {0x00};
byte[] b = new byte[1024];
for(int i = 0; i < 1024; i++)
{
b[i] = 0xFF;
}
IPEndPoint _ipep = new IPEndPoint(IPAddress.Parse("192.168.200.202"),5546);
Socket _server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
_server.SendTo(a, 1, SocketFlags.None, _ipep);
_server.SendTo(a, 1, SocketFlags.None, _ipep);
_server.SendTo(b, 1024, SocketFlags.None, _ipep);
}
【问题讨论】:
-
可以分享一下接收码吗?
-
我没有看到发布接收代码的相关性。它是在 arm 处理器上用 c 语言编写的。我可以用wireshark看到一切。
-
如果您愿意,我在上面发布的代码将允许您重新创建问题。
-
我想知道如果你把 a 变成一个单词而不是一个字节,你是否会丢失数据包。再次疯狂猜测,但这个线程可以提供一些帮助吗? stackoverflow.com/questions/4655332/… 或者这个stackoverflow.com/questions/2576184/…
-
@detay 我看到了这两个帖子之一。谢谢你。我不知道单词与字节是否会有所不同,但我确实想提一下,所有三个 sendto 调用都会返回正确的发送字节数,无论它们是否显示在网络上。