我今天遇到System.Net.Socket' s UdpClient
的一些问题。我不知道我哪里出错了。我有另一个使用Windows命名空间的UWP特定实现,它可以很好地工作,但我无法解决这个问题。
我有一台服务器从我的客户端向任意端口发送UDP数据包到localPort
。客户端偶尔会将数据包发送回remoteHostname:remotePort
。但是,我似乎从来没有从EndReceive
获得任何这些数据。
我可以在Wireshark(和我的服务器)上看到我正确地设法通过Send
从客户端向服务器发送数据包,并且服务器确实正在向客户端发送数据包正确的目标端口(localPort
)。任何想法都会很棒。这是班级:
using System;
using System.Net;
using System.Net.Sockets;
public class UdpReceiver
{
private UdpClient Client;
private AsyncCallback InternalCallback;
private IPEndPoint Destination;
private IPEndPoint Listen;
private bool Transmit = false;
public UdpReceiver(string remoteHostname, int remotePort, int localPort, int depth)
{
Destination = new IPEndPoint(IPAddress.Parse(remoteHostname), remotePort);
Listen = new IPEndPoint(IPAddress.Any, localPort);
Client = new UdpClient(localPort);
InternalCallback = MakeCallback();
Client.BeginReceive(InternalCallback, null);
}
public void Send(byte[] data)
{
if (!Transmit)
{
Transmit = true;
Client.BeginSend(data, data.Length, Destination, InternalCallback, null);
}
}
private AsyncCallback MakeCallback()
{
return new AsyncCallback((result) =>
{
if (Transmit)
{
Client.EndSend(result);
Transmit = false;
}
else
{
var data = Client.EndReceive(result, ref Listen);
System.Diagnostics.Debug.WriteLine("Got some data!");
Client.BeginReceive(InternalCallback, null);
}
});
}
}