У меня возникли некоторые проблемы с System.Net.Socket UdpClient
сегодня.Я не уверен, где я иду не так.У меня есть другая конкретная реализация UWP, использующая пространство имен Windows, которая прекрасно работает, но я не могу взломать это.
У меня есть сервер, отправляющий 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);
}
});
}
}