Android Java Socket - 连接超时
问题描述:
我试图创建一个简单的应用程序。我想我的手机是一个服务器套接字,我试图从我的电脑发送消息,我的电脑是客户端是这种情况。Android Java Socket - 连接超时
当他们在同一个网络中工作正常,但是当我在3G网络中连接手机时,我的PC中收到错误“连接超时”。
我使用的是无ip的主机(在这两种情况下)。当我做'telnet mycellphonehost.org 8080'例如我没有问题,它能够连接。我认为no-ip主机工作正常,因为是给我正确的外部IP。
我还使用一个称为FIREBIND的应用程序来测试端口是否打开。其结果是:“Firebind已成功地通过此端口使用TCP协议传输和接收数据。”
我已经阅读了很多关于这个问题的问题,类似的问题......但没有什么能帮助我解决这个问题。我希望有一个人可以帮助我。提前致谢!
按照代码:
-
Android的服务器
try{ ServerSocket server = new ServerSocket(port); Socket s = server.accept(); BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); System.out.println(input.readLine()); input.close(); s.close(); server.close(); } catch(IOException e){ System.out.println("ERROR: " + e.getMessage()); }
-
PC客户端
try{ Socket s = new Socket("myhostfromno-ip.org",port); PrintStream output = new PrintStream(s.getOutputStream()); output.println("TEST MESSAGE"); output.flush(); s.close(); } catch(IOException e){ System.out.println("ERROR: " + e.getMessage()); }
PS:他们是不同的网络中
答
我会建议使用GCM的细胞 通知和事后作出服务器拉。它肯定速度更快,您可以使用简单的REST服务器来提供数据。
您需要将您的PC作为服务器和您的机器人客户端。
你几乎可以肯定来自外界的防火墙关闭的3G-很少,如果任何运营商允许进入的TCP连接。 –
Gabe Sechan你有任何解决防火墙问题的建议吗?或者任何检查是否真的是防火墙? – Isabela
暂时把它们都放在同一个wifi网络上,看代码是否正常工作。如果可行,问题在于网络,很可能是防火墙。如果没有,那么你有一个我错过的代码问题。它需要是相同的WiFi网络,所以路由器不会充当NAT和防火墙。 –