2010-07-09 88 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