2013-03-08 90 views
2

我一直在試圖實現兩個Android模擬器之間的簡單套接字通信,但似乎無法得到它。Android Serversocket似乎不接受仿真器上的連接

我的服務器:

public void run() {  
    if (SERVERIP != null) { 
     try { 
      serverStatus.setText("My IP: " + SERVERIP); 
      serverSocket = new ServerSocket(6798); 
      serverStatus.setText("ServerSocket Created"); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 

     try { 
      while (true) { 
       serverStatus.setText("waiting for client"); 
       Socket client = serverSocket.accept(); 
       serverStatus.setText("Connected."); 
       BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
       String line = in.readLine(); 

       serverStatus.setText(line); 
       in.close(); 
       client.close(); 
      } 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    else 
     serverStatus.setText("Couldn't detect internet connection."); 
} 

我的客戶:

try { 
    InetAddress ina = InetAddress.getByName("10.0.2.2"); 
    socket = new Socket(ina, 6789); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

try { 
    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 
    out.println("Hey Server!"); 
    dispText.setText("sent"); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

客戶端繼續顯示 「已發送」 的消息,但是服務器不超越「等待客戶端「(卡在阻止accept())。 我在Windows機器上使用telnet將服務器模擬器控制檯上的端口6789重定向到6798。我也嘗試關閉我的防火牆,並在這裏提出的類似問題上發佈其他建議。請幫助,因爲看起來似乎無法得到它,並覺得我犯了一個非常愚蠢的錯誤。

另外,任何人都可以告訴我,如果服務器仍然卡在accept()上,客戶如何能夠移出套接字創建代碼行。或者,只要端口正在偵聽,服務器是否沒有響應,對客戶端無關緊要?

回答

0

Android模擬器通過設計放置在虛擬防火牆/路由器後面,即使它們位於同一網絡中,也無法看到對方。 「Using Network Redirection」以及仿真器上Google文檔的「互連仿真器實例」部分介紹瞭如何與仿真器實例進行通信。

至於你最後一個問題。使用套接字的空構造函數,然後使用connect call with a specified timeout

+0

我確實通過了Android文檔。我的服務器和客戶端都有IP地址10.0.2.15,每個都在它自己的虛擬網絡上。這就是客戶端連接到10.0.2.2(環回)的原因。我嘗試了空的構建套接字創建,然後使用連接,但我仍然遇到同樣的問題:客戶端仍然顯示'已發送',服務器卡住了。請幫忙。 – user1435993 2013-03-08 09:05:00