0

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

4

2 回答 2

3

也许您可以尝试使用 flush() 方法。

于 2013-05-25T06:39:10.110 回答
0

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

只要客户端连接,socket.getInputStream().read()就会使线程等待输入,因此使您的程序不执行任何操作 - 除非您收到一些输入,如果客户端断开连接,则返回 -1

一旦客户端连接(甚至在断开连接之后),socket.isConnected()总是返回真奇怪!

客户端断开连接后, out.checkError()为真

真正找出答案的唯一方法是在关联的 Input/OutputStreams 上读取(您将获得 -1 作为返回值)或写入(将抛出 IOException(损坏的管道))。

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

希望能帮助到你!

于 2013-05-25T06:45:50.407 回答