2014-05-08 34 views
0

我有一個通過UDP協議進行通信的完整程序。程序在IP 192.168.1.9的PC上運行。當我發送特定數據時,該程序會作出響應。發送UDP在特定端口的兩個程序之間發送和接收

代碼:

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); 
     } 

我需要捕捉通信從192.168.9至192.168 .1.3在端口1530.

+0

你爲什麼使用UDP進行進程間通信? – lego

+0

然後事件,爲什麼你使用特定的IP而不是使用'127.0.0.1'環回IP? –

+0

在192.168.1.9上運行的程序已完成,無法更改。 UDP通信已經實現。 – user3519791

回答

1

您的發件人綁定到端口1530上的本地IP 192.168.1.3作爲其源,然後將端口上的遠程IP 192.168.1.9作爲目的地發送數據。

你的接收器被結合到本地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); 
    
+0

我必須通過端口1531發送,但應用程序在此端口上偵聽。如果我使用端口1530,應用程序不響應。 – user3519791

+1

再次閱讀我的答案。發件人正在從端口1530發送到端口1531,但接收端不在端口1531上監聽。我告訴過你如何解決這個問題。 –

相關問題