2013-01-11 85 views
-1

我在這裏有一個UDP ping客戶端。我不知道我是否做得對,但我認爲它可以工作,如果我將IP地址設置爲127.0.0.1。但是,如果我將其設置爲Google的IP地址,則不會。我收到一個例外:java.net.SocketTimeoutException: Receive timed out我可以ping我的本地主機,但我不能與其他IP地址

import java.io.*; 
import java.net.*; 
import java.util.*; 

public class PingClient { 

    private static final int AVERAGE_DELAY = 0; 
    public static void main(String[] args) throws Exception { 
     int port = 4997; 
     DatagramSocket socket = new DatagramSocket(port); 

     for(int i=1;i<=10;i++) { 
      byte[] buf = new byte[1024] ; 
      Calendar cal=Calendar.getInstance(); 
      String ping="PING "+ i +" "+cal.getTimeInMillis()+" ms"+"\r\n"; 
      buf=ping.getBytes("UTF-8"); 
      InetAddress address = InetAddress.getByName("69.63.176.11"); 
      DatagramPacket packet = new DatagramPacket(buf, buf.length, address, port); 
      packet.setData(buf); 
      socket.send(packet); 
      Thread.sleep(10* AVERAGE_DELAY); 
      DatagramPacket server_response = new DatagramPacket(new byte[1024], 1024); 
      socket.setSoTimeout(1000); 
      socket.receive(server_response); 
      printData(server_response); 
     } 
    } 
} 


+0

你是什麼意思的「我不能ping」?例外?沒有答案?另外,至於2.是的,因爲127.0.0.1是回送,並且是你自己的機器。 – fge

+1

遠程計算機上的UDP端口4997上是否有任何內容希望得到答案? –

+0

@fge:我得到一個異常:'java.net.SocketTimeoutException:接收定時out' @JoachimPileborg:沒有,沒有。我剛發明它。這是一個問題嗎?對不起,我還不熟悉。 –

回答

1

平是互聯網時代的一個有趣的恐龍。

不幸的是,你沒有指定你在哪個平臺上。在Windows平臺上,127.0.0.1(這是本地主機地址)不會路由實際的網絡適配器。微軟已經優化了本地主機路由以通過堆棧的不同部分,因此無論網絡連接如何,它都可以正常工作。

在基於Unix主機上,你就可以看到使用網絡嗅探器要到「LO」或loopback接口的數據包。無論互聯網連接如何,這些都可以工作。

平,這是一個非常古老的協議,使用ICMP協議。我相信這實際上是一個層,或者可能與UDP相同的網絡層,但它不是UDP消息。

至於另一名成員談到這個問題 - 如果有什麼聽你發送給那麼你寫會失敗,客戶端的端口。

關於「平」命令所做的更多信息,請this

編輯更多信息 我想我看到的問題 - 有在播放客戶兩種不同的端口號在端口4997建立套接字和服務器正在對端口8117插座這似乎是不匹配的部分。

我做了一個快速谷歌搜索可以爲你指明正確的方向。有關更多信息,請參閱this article

我很多年沒有編程TCP/UDP級別的東西,所以我很抱歉,我不能提供更多的實質性信息。

相關問題