我有一个完整的程序,通过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的通信。
答案 0 :(得分:1)
您的发件人绑定到端口1530上的本地IP 192.168.1.3
作为其来源,然后将数据发送到端口 1531 上的远程IP 192.168.1.9
作为目标。
您的接收方绑定到端口 1530 上的本地IP 0.0.0.0
以接收数据,然后过滤掉未从远程端口1530(即它)发送的任何入站数据。
数据未发送到接收方正在读取的端口。
要解决此问题,您需要:
将您的接收方更改为绑定到端口1531
而不是端口1530
:
UdpClient listener = new UdpClient(1531);
更改发件人以将数据发送到端口1530
而不是端口1531
:
IPEndPoint destination = new IPEndPoint(IPAddress.Parse("192.168.1.9"), 1530);