下面是代码。这是我遇到的问题。
我得到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);
}
答案 0 :(得分:1)
根据您对ARP问题的评论,我想建议一些方法来调试和缩小问题,然后提出一些解决方案。
如何调试:
尝试将ARP条目设为“静态” 您的PC不发送ARP请求 每一次。使ARP入口静态 你可以在命令上写“arp” 提示查看选项列表 并帮助添加静态ARP条目。
另一个想法是打开命令 提示并写“ping 192.168.200.202 -t“,以便您的PC继续ping另一个客户端。 这将保留您的PC的ARP条目 最新的,何时运行 你的C#程序,它不会发送 再次ARP,它将直接发送 UDP。
以上几点只是调试并确保您猜对了问题。
可能的解决方案:
我希望它有所帮助。