2012-09-25 145 views
1

我工作的控制器上側MEGACO協議的應用程序。我通過UDP prptocol將MEGACO消息發送到媒體網關。媒體網關正在迴應請求。當我運行wireshark與指定的端口和IP過濾wireshark顯示所有捕獲的MEGACO數據包。但在我的應用程序中(用JAVA寫的)一些數據包沒有到達。更具體地說,我的應用程序只有事務回覆和事務響應確認(參考:RFC 3015)消息沒有達到。Wireshark的捕獲數據包,但JAVA應用不捕獲

我已經嘗試了很多排列組合。即使我已經爲每個接收消息分配了新的數據報包和緩衝空間作爲測試。但沒有結果。我的udp接收器的代碼如下。

while (running) { 
     //do work here 
     try { 
      byte[] dpBuffer = new byte[MAX_BUFFER_SIZE]; 
      DatagramPacket dp = new DatagramPacket(dpBuffer, MAX_BUFFER_SIZE); 
      this.socket.receive(dp); 
      byte[] temp = new byte[dp.getLength()]; 
      System.arraycopy(dp.getData(), 0, temp, 0, dp.getLength()); 
      System.out.println("Read data"); 
      for(int i=0;i<temp.length;i++) 
      { 
       System.out.print((char)(temp[i])); 
      } 
      ByteArrayUtil msg = new ByteArrayUtil(temp, dp.getLength()); 
      msgParser.parseMsg(msg); 
     } catch (Exception e) { 
      logger.error("Megaco Reader Failed to read Packet due to :" ,e); 
     } 
    } 

任何幫助?

+0

我會重新檢查那些Wireshark的捕獲這些數據包的源端口和目的端口。 –

+0

感謝您的評論。在您的評論之後,我剛剛檢查了數據包中的端口字段。發現那些JAVA程序沒有收到的包的目的端口是60800,但Wireshark和JAVA程序收到的包的端口都是2944.但是我不明白這一點! !我在wireshark中設置過濾器爲「udp.port == 2944 && ip.src == IP address」但這些數據包中的數據包字段如何變成60800! –

+0

「udp.port == 2944」將在目標端口和源端口中查找端口號。請記住,UDP數據包包含2個端口號,一個適用於每個系統。再看看,你會發現其中一個2944。 –

回答

0

感謝E_net4。

正如我在我的評論中提到,我是使用Wireshark的在錯誤的過濾器。在Wireshark中如果僅使用

"udp.port == x" 

作爲過濾器,將過濾具有源或目的地端口x那些分組。要過濾那些具有源端口== x或目標端口== x的數據包,應分別使用udp.srcport == x和udp.destport ==。 謝謝大家。