UDP在特定端口中的两个程序之间发送和接收

时间:2014-05-08 00:04:29

标签: sockets udp port

我有一个完整的程序,通过UDP协议进行通信。程序在具有ip 192.168.1.9的PC上运行。当我发送特定数据时,该程序会响应。

发送代码:

var client = new UdpClient();
IPEndPoint destination = new IPEndPoint(IPAddress.Parse("192.168.1.9"), 1531);
IPAddress localIp = IPAddress.Parse("192.168.1.3");
IPEndPoint source = new IPEndPoint(localIp, 1530);
client.Client.Bind(source);
client.Connect(destination);
byte[] send_buffer = { 170, 170, 0, 0, 1, 1, 86 };
client.Send(send_buffer, send_buffer.Length);

Wireshark捕获: Screen

但我的应用程序没有检测到任何内容:

    UdpClient listener = new UdpClient(1530);

    IPAddress ip = IPAddress.Parse("192.168.1.3");
    IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 1530);

    byte[] receive_byte_array;

        while (!done)
        {
            Console.WriteLine("Waiting for broadcast");
            receive_byte_array = listener.Receive(ref groupEP);
        }

我需要捕获端口1530上从192.168.9到192.168.1.3的通信。

1 个答案:

答案 0 :(得分:1)

您的发件人绑定到端口1530上的本地IP 192.168.1.3作为其来源,然后将数据发送到端口 1531 上的远程IP 192.168.1.9作为目标。

您的接收方绑定到端口 1530 上的本地IP 0.0.0.0以接收数据,然后过滤掉未从远程端口1530(即它)发送的任何入站数据。

数据未发送到接收方正在读取的端口。

要解决此问题,您需要:

  1. 将您的接收方更改为绑定到端口1531而不是端口1530

    UdpClient listener = new UdpClient(1531);
    
  2. 更改发件人以将数据发送到端口1530而不是端口1531

    IPEndPoint destination = new IPEndPoint(IPAddress.Parse("192.168.1.9"), 1530);