Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法响应Java中的非本地套接字_Java_Sockets_Inputstream_Outputstream - Fatal编程技术网

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

无法响应Java中的非本地套接字,java,sockets,inputstream,outputstream,Java,Sockets,Inputstream,Outputstream,我正在尝试用Java制作一个客户机-服务器程序。实际上,客户端可以与我的服务器计算机取得联系,因为在我的路由器上为端口7777设置了转发。因此,我很好地收到了他们的信息。 一旦我从客户机收到消息,我就打开套接字对象(我不关闭任何输入或输出流),然后尝试发回消息。我没有得到任何例外,所以我非常确定消息可以很好地传递到套接字的IP,我甚至尝试过用自己的服务器计算机发送和应答消息,效果很好。因此,通过保持套接字,我确实知道客户端的IP地址,并且消息可以很好地到达客户端的路由器。我认为没有发生的是,路由

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

可能是您可以尝试flush()方法。

可能是您可以尝试flush()方法。

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

socket.getInputStream().read()使线程在客户端连接时等待输入,从而使程序不运行 做任何事情-除非您得到一些输入返回-1如果客户端 断开

socket.isConnected()在客户端连接后(甚至在断开连接后)始终返回true

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

真正找到答案的唯一方法是阅读(返回值为-1) 值)或写入(将抛出IOException(断开的管道) 关联的输入/输出流

一旦确定连接到服务器,就只有您可以跳到服务器上查找路由器或网络是否有问题


希望有帮助

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

socket.getInputStream().read()使线程在客户端连接时等待输入,从而使程序不运行 做任何事情-除非您得到一些输入返回-1如果客户端 断开

socket.isConnected()在客户端连接后(甚至在断开连接后)始终返回true

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

真正找到答案的唯一方法是阅读(返回值为-1) 值)或写入(将抛出IOException(断开的管道) 关联的输入/输出流

一旦确定连接到服务器,就只有您可以跳到服务器上查找路由器或网络是否有问题


希望有帮助

给我们看看代码。或者更好的是,只是代码的相关部分。您如何测试它?Telnet连接到您的服务器?我建议
ping
同时连接服务器和客户端,看看是否可以从两端连接到它们显示代码。或者更好的是,只是代码的相关部分。您如何测试它?Telnet到您的服务器?我建议
ping
服务器和客户端,看看它们是否可以从两端
Socket访问。isConnected()
告诉您是否连接过
Socket
。它不会告诉您任何有关连接当前状态的信息
out.checkError()
在写入时出现
IOException
后返回true,因为
PrintStream
PrintWriter
抑制异常,这是不通过网络使用它们的一个很好的理由。客户端断开连接后,
不会立即变为真。如果连接被中止,读取也会抛出一个
IOException
,而不是返回-1。这里的错误太多了-1@EJP仅供参考Socket.isConnected不工作。你可以自己试试。checkError()刷新流并检查其错误状态,因此如果断开连接,则返回true。@JunedAhsan-我们知道!如果您想了解原因,请阅读javadoc。如果一个方法的行为与指定的行为完全一致,那么它就没有什么“奇怪”的地方了。这里唯一“奇怪”的事情是,你一开始就懒得读javadoc:-)@JunedAhsan-而且
checkError
只有在OP使用
PrintWriter
PrintStream
时才有效,而这在他的情况下不太可能是一个合适的选择。
Socket.isConnected()
告诉您是否连接过
插座
。它不会告诉您任何有关连接当前状态的信息
out.checkError()
在写入时出现
IOException
后返回true,因为
PrintStream
PrintWriter
抑制异常,这是不通过网络使用它们的一个很好的理由。客户端断开连接后,
不会立即变为真。如果连接被中止,读取也会抛出一个
IOException
,而不是返回-1。这里的错误太多了-1@EJP仅供参考Socket.isConnected不工作。你可以自己试试。checkError()刷新流并检查其错误状态,因此如果断开连接,则返回true。@JunedAhsan-我们知道!如果您想了解原因,请阅读javadoc。如果一个方法的行为与指定的行为完全一致,那么它就没有什么“奇怪”的地方了。这里唯一“奇怪”的事情是,你一开始就没有读javadoc:-)@JunedAhsan-和
checkError<