UDP端口无法接收数据

时间:2017-07-19 11:35:49

标签: c# udp

我正在尝试通过UDP端口接收和发送数据。它与TCP的工作非常好,但是当我将其更改为UDP时,它会破坏。

这是我的UDP代码,仅用于接收:

Socket receiver_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.11.254"), 11000);
.
.
.
public Form1()
{
    InitializeComponent(); 
    receiver_socket.Connect(ipep);         
}

private void Receive_socket_delegate()
{
    receiver_socket.BeginReceive(r_buff, 0, r_buff.Length, SocketFlags.None, new AsyncCallback(socket_receive_data), receiver_socket);
}

void socket_receive_data(IAsyncResult iar)
{
    Socket remote = (Socket)iar.AsyncState;
    int recv = remote.EndReceive(iar);
    if (recv > 0)
    {...
    }
}   

有什么不对?

1 个答案:

答案 0 :(得分:0)

UDP是非绑定协议,您不需要 receiver_socket.Connect(); 。还有用于UDP通信的 UDPClient 对象。

UdpClient listener = new Udpclient();
//Socket receiver_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.11.254"), 11000);
.
.
.
public Form1()
{
    InitializeComponent(); 
    //receiver_socket.Connect(ipep);
    Thread listeningthread = new Thread(Receive_socket_delegate);
    listeningthread.Start();         
}

private void Receive_socket_delegate()
{
   // receiver_socket.BeginReceive(r_buff, 0, r_buff.Length, SocketFlags.None, new AsyncCallback(socket_receive_data), receiver_socket);
    while(true)
    {
    byte[] bytes = listener.Receive(ref ipep);
    ThreadPool.QueueUserWorkItem(state=>{
    socket_receive_data(bytes);
    });
    }
}

void socket_receive_data(byte[] bytes)
{
    // Write or use your data in here "bytes"
    if (recv > 0)
    {...
    }
}   
相关问题