2012-01-08 56 views
1

我一直在通過Wi-Fi連接兩臺PC和我使用的IP地址來做到這一點如下面的例子:通過Wi-Fi連接時使用的計算機的名稱,而不是IP地址

String ipAddress = "192.168.X.X"; 
Socket socket = new Socket(ipAddress, 8888); 

我的IP地址經常改變,所以這對我來說是一個麻煩,我想用計算機的名字來代替這個。這怎麼可能?

編輯:

從下面的答覆,我能做到這一點在兩臺PC上這樣說:

String ipAddress = "somename"; 
Socket socket = new Socket(InetAddress.getByName(ipAddress), 12345); 

String ipAddress = "somename"; 
Socket socket = new Socket(ipAddress, 8888); 

但是當我把它在我的Android應用程序,它不起作用。在Android中有沒有特殊的方法?

+2

您必須有一個名稱解析系統,Java可以使用它。如果Windows,也許Android有WINS解析?嘗試並使用InetAddress'.getByName(「themachinenamehere」)' – fge 2012-01-08 10:46:49

回答

0

除了IP地址,您還可以使用主機名。例如,如果你的服務器有主機名「foo.bar.com」您可以使用

Socket socket = new Socket("foo.bar.com", port); 

在你的本地網絡,你應該能夠使用本地的PC的主機名。我剛剛寫了一個小例子,它可以成功連接到我的打印服務器:

import java.io.*; 
import java.net.Socket; 
import java.net.UnknownHostException; 


public class SocketTester { 

    /** 
    * @param args 
    * @throws IOException 
    * @throws UnknownHostException 
    */ 
    public static void main(String[] args) throws UnknownHostException, IOException { 
     //Create socket connection 
      try{ 
      Socket socket = new Socket("printserver", 23); 
      BufferedReader in = new BufferedReader(new InputStreamReader(
         socket.getInputStream())); 
      try{ 
       while(in.read()!=-1){ 
        String line = in.readLine(); 
        System.out.println("Text received: " + line); 
       } 
       } catch (IOException e){ 
       System.out.println("Read failed"); 
       System.exit(1); 
       } 

      } catch (UnknownHostException e) { 
      System.out.println("Unknown host: kq6py"); 
      System.exit(1); 
      } catch (IOException e) { 
      System.out.println("No I/O"); 
      System.exit(1); 
      } 

    } 

} 
+0

這並不總是有效。我不記得具體時間和條件是什麼,但我絕對可以記得它不起作用。我認爲這取決於操作系統。 – 2012-01-08 11:00:54

+0

我試過這個,並且能夠在我的電腦上成功地做到這一點,但它不適用於我的Android設備。它迫使關閉。 – 2012-01-08 11:16:00

相關問題