2010-02-08 25 views
0

我使用Java中DatagramSocket類從C語言編寫這裏客戶端接收UDP數據包是接收(服務器套接字已經建立)代碼:DatagramSocket.receive()問題

byte[] inputByte = new byte[1]; 
     DatagramPacket recvdPacket = new DatagramPacket(inputByte, inputByte.length); 



     try { 
      serverSocket.receive(recvdPacket); 

然後它打印內容。我的調試信息(在此代碼中未顯示)表明它正在成功訪問部件並正在等待(這是一個阻塞呼叫)。這裏是問題:

此服務器只接收數據包發送消息的客戶端運行時,從來沒有第一個。即使第一次運行客戶端發送多個數據包,服務器也不會顯示任何內容,直到整個客戶端運行第二次。假設問題出現在服務器端而不是客戶端是安全的嗎? (客戶端代碼不是由我寫的......這很噁心,並在C)。

+0

嘗試獲取包嗅探器並查看客戶端是否實際首次發送內容。 –

回答

2

我會盡量給出最好的答案,但只有3行代碼可以看,你可能會做一些壞事,我看不到。你可以發佈更多的相關代碼嗎?

聽起來像我這樣的問題可能在客戶端。還有一種可能性,就是你的網絡對UDP流量做了一些簡單的事情(我遇到了其中的一些)。如果你想隔離哪一方有問題,我建議在服務器機器上運行wireshark,通過這兩個客戶端的運行,然後看看服務器機器正在接收什麼類型的數據包。確保在客戶端的連續運行之間給出幾秒鐘,然後篩選出有問題的UDP端口。如果在第一次運行客戶端時沒有數據包到達服務器,那麼您的問題可能在客戶端。

+0

+1,但在服務器機器和客戶端機器上運行Wireshark。我在路由器上遇到了問題,在服務器上運行跟蹤表明客戶端沒有發送(我們沒有包),而在客戶端上運行跟蹤也清楚地表明客戶端正在發送,但數據包在客戶端之間丟失和服務器。 –

+0

+1包嗅探器是任何網絡編程的寶貴工具,無論是Java,C,Haskel還是Cobol :) –