【发布时间】:2011-11-19 13:38:30
【问题描述】:
我无法将我的 Android 手机的套接字连接到我的计算机上运行 netcat 侦听端口 (5555)。
我在我的 android 应用程序中运行的内容:
try {
Socket s = new Socket("My IP number here (not local IP)", 5555);
DataOutputStream outToServer = new DataOutputStream(s.getOutputStream());
outToServer.writeBytes("Hello!");
s.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
这是我用于 netcat 的行:nc -l 5555
我不确定我错过了什么.. 我已经转发了路由器上的端口并重新启动了路由器。在我的 android 应用程序中添加了对 Internet 的权限。 手机是3G连接的,我的电脑是宽带连接的。 我的防火墙中允许使用 netcat。
尝试连接时,我的应用程序中出现SocketTimeoutException 错误。
我猜路由器负责处理 LAN 中的哪台计算机将接收请求。
有人知道我错过了什么吗?
编辑:我想我可能已经找到了问题所在。我的路由器Virtual Server 和Port forwarding 有两个选项。我不知道在 UDP/TCP 中将哪个设置为端口 5555。
据我了解,我应该使用Virtual Server 而不是端口转发?如果是这样,有人可以澄清两者之间的区别吗?
【问题讨论】:
-
我同意@Brett Hale。在 s.close() 之前尝试 outToServer.flush()。您在哪一行得到异常?
-
你是否在你的Server类中设置了一个ServerSocket对象来监听5555端口的请求?
-
@AlbertS:不用担心。 :) 是的,在手册页中它说“-p source_port:指定 nc 应该使用的源端口,受权限限制和可用性限制。结合使用此选项是错误的使用 -l 选项。",如果我在计算机上使用 telnet 进行连接,它可以工作; “telnet 127.0.0.1 5555” - 但由于我尝试在局域网之外进行远程连接,我猜有些东西没有通过必要的层传播..
-
@Zolomon 我明白了。这是一个关于虚拟服务器和端口转发的区别的页面:dlink.cc/knowledgebase/…
标签: java android sockets client