Java 从android客户端应用程序连接套接字到服务器时出现问题

Java 从android客户端应用程序连接套接字到服务器时出现问题,java,android,sockets,client,Java,Android,Sockets,Client,我在将android手机的插座连接到运行netcat的计算机时遇到了问题,正在通过端口(5555)进行监听 我在android应用程序中运行的内容: try { Socket s = new Socket("My IP number here (not local IP)", 5555); DataOutputStream outToServer = new DataOutputStream(s.getOutputStream()); ou

我在将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应用程序中添加了互联网权限。 手机通过3G连接,我的电脑通过宽带连接。 我的防火墙允许使用netcat

尝试连接时,我的应用程序中出现
SocketTimeoutException
错误

我猜路由器负责处理LAN中的哪台计算机将接收请求

有人知道我错过了什么吗

编辑:我想我可能已经找到了问题所在。。我的路由器上有两个选项
虚拟服务器
端口转发
。我不知道在UDP/TCP中设置哪个端口为5555。
据我所知,我应该使用
虚拟服务器
而不是端口转发?如果是的话,有人能澄清两者之间的区别吗

自上次配置以来,我的计算机已更改了本地IP,因此我的
虚拟服务器
/
端口转发
规则不适用,因此我对其进行了更新(从192.168.0.199->192.168.0.196),现在它运行良好

因此,所有步骤都适用:

  • 为路由器上的
    虚拟服务器
    /
    端口转发
    设置规则
  • 为路由器上的
    入站过滤设置规则,以防您只允许白名单上的IP连接并传播到下一个安全层
    
  • 如果您的路由器具有任何其他防火墙设置,请创建允许建立连接的规则
  • 在服务器/计算机上,允许防火墙中的端口或正在运行的应用程序接收入站连接
  • 利润

我同意@Brett Hale的观点。在s.close()之前,请尝试outToServer.flush()。您在哪一行获得异常?您是否在服务器类中设置了ServerSocket对象以侦听端口5555中的请求?@AlbertS:不用担心。:)是的,在手册页中显示“-p source_port:指定nc应使用的源端口,但受权限限制和可用性的限制。将此选项与-l选项结合使用是错误的。”,如果我在计算机上使用telnet进行连接,它将正常工作;“telnet 127.0.0.1 5555”-但由于我试图在局域网外远程连接,我猜有些东西没有通过必要的层传播。@Zolomon我明白了。这是一个关于虚拟服务器和端口转发之间区别的页面:和:我很高兴你解决了这个问题。这只是一个更改过的IP地址。也许下一次最好将相同的IP地址分配给一个特定的MAC地址。可以在路由器的LAN部分DHCP设置中执行此操作。我想你不会相信这个问题这么容易解决:-)@AlbertS:谢谢你真诚的帮助