2010-07-09 113 views
1

我一直試圖通過TCP套接字連接兩個Android設備(2.1)。 代碼的重要組成部分:通過TCP套接字連接兩個Android設備

服務器: ServerSocket serverSocket = new ServerSocket(SERVERPORT);

Client: Socket socket = new Socket(serverAddr,SERVERPORT);

奇怪的是,如果客戶端是仿真器,我可以使其工作,但如果在真實設備上運行它們,則相同的代碼會失敗。 在客戶端上的失敗是:


java.net.SocketException: No route to host 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connectSocketImpl(Native 
Method) 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem. 
java:114) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java: 
245) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java: 
220) 
    at java.net.Socket.startupSocket(Socket.java:780) 
    at java.net.Socket.(Socket.java:314) 

我用WIFI和移動網嘗試過,他們是在同一個子網兩次,INTERNET權限已定,那麼服務器通過其實際192.168 .. IP地址。
我打算用setCustomSocketImplFactory()更改套接字實現。
這個問題在實現MSRP協議到Android的過程中至關重要。
任何人都可以給我一些建議嗎?

+0

你說的真實IP的意思是,如果程序在兩部手機上運行? – 2010-08-03 07:19:30

+0

我只是想說,問題不在於我使用10.0.2.15 IP作爲真實設備 – Diepie 2010-08-04 12:31:23

回答

1

很少有手機具有可公開路由的IP地址。大部分都在NAT後面。

你可能要考慮使用C2DM代替:

http://code.google.com/android/c2dm/

+0

感謝您的建議,不需要全局可路由的IP地址,因爲RFC兼容的解決方案適用於NAT-遍歷(STUN,TURN,ICE等)。 – Diepie 2010-12-13 09:09:49