2013-11-21 55 views
2

我有一個服務器套接字在我的本地計算機中偵聽,並且我試圖從我的android手機連接到此服務器。 我已經使用同一臺計算機上的客戶端測試了服務器套接字,並且它們能夠連接。Android客戶端套接字無法連接到服務器

但是,我的android手機客戶端不能連接到套接字。 我的電腦的防火牆已關閉。我的電腦和手機都連接到同一個wifi網絡。有人可以幫忙嗎?

代碼下面的客戶端套接字:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Thread fst = new Thread(new startConnection()); 
     fst.start(); 
    } 

public class startConnection implements Runnable { 
     public void run() { 
      try {   
       final InetAddress hostAddr = InetAddress.getByName("192.168.2.1");//This is the local IP of my computer where the serversocket is listening 
         clientSocket = new Socket(); 
         clientSocket.bind(null); 
         clientSocket.connect(new InetSocketAddress(hostAddr, 12555),30000); 
       } catch (Exception e) { 
         e.printStackTrace(); 
       } // end TryCatch block 
     } 
} 

,我不斷收到錯誤是套接字連接timeout.Help?

非常感謝!

+0

你的電腦裏是否有像kasperSky這樣的反病毒軟件?如果是這樣,您需要關閉它,因爲它可以防止未經授權的訪問。 – Coderji

+0

只是我關掉的防火牆。我有一個mac,不知道這是否有所作爲 –

+0

您是否嘗試過手機上的另一個客戶端(瀏覽器)連接到服務器?服務器收到客戶的請求了嗎? – Zhongzhi

回答

1

FOund the issue。 我使用這段代碼來獲取服務器的本地IP:

try { 
    ip = InetAddress.getLocalHost(); 
}catch (UnknownHostException e) { 
     e.printStackTrace(); 
} 

這是給像192.168.2.1服務器的本地IP。然後我使用這個地址連接客戶端到服務器,並且連接從未工作。

我不得不使用像10.0.0.9這樣的數字,然後工作。 爲了得到那正確的IP,我不得不使用此代碼:

Enumeration<NetworkInterface> nis = null; 
       try { 
        nis = NetworkInterface.getNetworkInterfaces(); 
       } catch (SocketException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       NetworkInterface ni; 
       while (nis.hasMoreElements()) { 
        ni = nis.nextElement(); 
        try { 
         if (!ni.isLoopback() && ni.isUp()) { 
          for (InterfaceAddress ia : ni.getInterfaceAddresses()) { 
           //filter for ipv4/ipv6 
           if (ia.getAddress().getAddress().length == 4) { 
            //4 for ipv4, 16 for ipv6 
            System.out.println(ia.getAddress()); 
           } 
          } 
         } 
        } catch (SocketException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 

這給了我: /10.0.0.9 /192.168.2.1

第一個數字是正確的。

有人可以從網絡的角度來解釋,這兩個數字/獲取它們的代碼有什麼區別,以及爲什麼有效?

謝謝!