【问题标题】:connecting two android devices via TCP sockets通过 TCP 套接字连接两个 android 设备
【发布时间】:2011-03-13 18:44:19
【问题描述】:

我一直在尝试通过 TCP 套接字连接两个 Android 设备 (2.1)。 代码的关键部分:

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

客户: 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() 更改套接字实现。
这个问题在Android实现MSRP协议的过程中至关重要。
谁能给我一些建议?

【问题讨论】:

  • 程序运行在两部手机上,真实IP是什么意思?
  • 我只是想说问题不在于我在真实设备上使用 10.0.2.15 IP

标签: android sockets tcp


【解决方案1】:

很少有手机具有可公开路由的 IP 地址。大多数都在 NAT 之后。

您可能要考虑改用 C2DM:

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

【讨论】:

  • 感谢您的建议,不需要全球可路由的 IP 地址,因为有符合 RFC 的 NAT 穿越解决方案(STUN、TURN、ICE 等)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
相关资源
最近更新 更多