簡體   English   中英

Wireshark如何接收udp廣播數據包,而不接收套接字監聽器

[英]How can a udp broadcast packet be received by wireshark but not socket listener

我有一個可以在多台計算機上運行的C#應用​​程序,但是由於某種原因,它不能在另一台計算機上使用。 都是Windows XP。

我只是打開一個端口並聽:

void Open() 
{
var myIpAddress = UdpComm.GetPcIpAddress(target);

listenEndPoint = new IPEndPoint(myIpAddress, RemotePort);

System.Windows.Forms.MessageBox.Show("Creating listener: " + target.ToString() + " - " + listenEndPoint.ToString());
_client = new UdpClient(listenEndPoint);
_client.EnableBroadcast = true;
_client.BeginReceive(ReceiveCallback, null);
}

public void ReceiveCallback(IAsyncResult ar)
{
  System.Windows.Forms.MessageBox.Show("Data received");
}

當我運行程序時,我看到Open方法成功運行,並且地址和端口看起來正確。

當我在Wireshark上查看此消息時,我還看到從遠程地址正確發送了數據,但是我從沒看到回調中的消息框。

我沒有拋出任何錯誤。 關於什么可能導致數據顯示在Wireshark上但不在我的應用程序中的任何想法?

一旦將NIC的子網掩碼更改為255.255.255.0(而不是255.255.252.0),便開始調用回調。

我不確定為什么wireshark可以看到流量,但是看不到UdpClient,但是這種變化似乎有所作為。

Wireshark捕獲所有內容,而您的應用程序僅獲得過濾后的結果。
問題可能出在發送方。 本質上,子網掩碼定義地址的哪個部分定義網絡和哪個節點。 因此,子網掩碼為255.255.252.0時,網絡地址為22位長。
假設您的客戶位於10.0.16.100 \\ 22。 為了廣播目的,保留了具有最高可能地址的節點地址。 許多應用程序期望網絡掩碼的長度為24位(255.255.255.0),並將廣播到10.0.16.255。 這是錯誤的,因為僅設置了最后8位。 在該子網中正確的廣播地址應為10.0.19.255

您必須結束異步接收過程才能捕獲傳入的數據。 當您調用_client.BeginReceive()時,它會生成一個線程來接收您的傳入數據。 為了捕獲此數據,您應該將以下代碼添加到ReceiveCallback中。 然后,您將可以根據需要使用傳入的byte []。

IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] incomingBytes = _client.EndReceive(ar, ref endPoint);

此外,您可以通過以下鏈接在MSDN上引用UdpClient類:

http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.endreceive.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM