C#UdpClient没有收到

时间:2018-06-01 16:25:06

标签: c# sockets udpclient

我今天遇到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);
            }
        });
    }
}

0 个答案:

没有答案