我原本试图编写一个小型控制台应用程序来在本地发送UDP数据包,因此我可以测试我的“接收器”应用程序。在这里搜索Stack Overflow,我设法得到了一些有用的东西。但它只能有时。我知道UDP是不可靠的,但在这种情况下,它要么完全有效,要么根本不起作用。
我试图将代码减少到绝对最小值。如果您将这两个代码块复制到两个不同控制台应用程序的main
中并一起运行(在VS之外),我有兴趣知道是否:
如果我让Sender继续运行,并且停止/启动接收器十几次,它将进入一个不会收到任何东西的状态。如果你继续尝试,它会再次开始工作,然后停止,然后开始......
int port = 31572;
var udpReceiver = new UdpClient { ExclusiveAddressUse = false };
udpReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
var localEP = new IPEndPoint(IPAddress.Loopback, port);
udpReceiver.Client.Bind(localEP);
Task.Factory.StartNew(() =>
{
var inEndPoint = new IPEndPoint(IPAddress.Any, 0);
while(true)
{
udpReceiver.Receive(ref inEndPoint);
Console.Write(".");
}
});
Console.ReadKey(true);
udpReceiver.Close();
var port = 31572;
UdpClient udpSender = new UdpClient { ExclusiveAddressUse = false };
udpSender.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
var remoteEP = new IPEndPoint(IPAddress.Loopback, port);
udpSender.Client.Bind(remoteEP);
var data = new byte[500];
var rnd = new Random();
Task.Factory.StartNew(() =>
{
while(true)
{
Console.Write(".");
rnd.NextBytes(data);
udpSender.Send(data, data.Length, remoteEP);
Thread.Sleep(1000);
}
});
Console.ReadKey(true);
udpSender.Close();