无法响应Java中的非本地套接字

时间:2013-05-25 06:36:16

标签: java sockets inputstream outputstream

我正在尝试用Java创建一个客户端 - 服务器程序。实际上,客户端可以与我的服务器计算机联系,因为我的路由器上的端口7777已设置转发。因此,我得到他们的消息很好。 一旦我从客户端收到消息,我就保持套接字对象打开(我不关闭任何输入或输出流),然后尝试发回消息。我根本没有任何例外,所以我很确定这个消息可以很好地传递到套接字的IP,我甚至尝试使用我自己的服务器计算机发送和回答它工作正常。所以发生了什么,通过保持套接字我知道客户端的IP地址,消息到达客户端的路由器。我认为没有发生的是路由器没有将消息传递给该客户端,因为它不必知道它。 我现在有点迷茫,现在让我发疯了。感谢

2 个答案:

答案 0 :(得分:3)

可能你可以试试flush()方法。

答案 1 :(得分:0)

可能是服务器正在关闭套接字并且您没有连接。 java中有不同的方法来检查它,很少有工作,很少有工作。以下是有关您应该检查客户端是否已连接的详细信息:

  

socket.getInputStream()。read()只要客户端连接就让线程等待输入,因此不会使你的程序   做任何事情 - 除非你得到一些输入,如果客户端返回-1   断开

     

socket.isConnected()一旦客户端连接(甚至断开连接后)就会返回true,这很奇怪!!

     客户端断开后,

out.checkError()为true

     

真正找到的唯一方法是阅读(你会得到-1作为回报   在)上写入(写入一个IOException(断开的管道))   关联的Input / OutputStreams。

如果您确定,您已连接到服务器,那么只有您应该继续查找路由器或网络是否有问题。

希望它有所帮助!