如何解决为什么`java.net.Socket`接口无法反映服务器连接关闭
我正在使用以下命令在docker中运行石墨服务器
docker run -d --name graphite --restart=always -p 81:80 -p 2003-2004:2003-2004 -p 2023-2024:2023-2024 -p 8125:8125/udp -p 8126:8126 graphiteapp/graphite-statsd
我有连接石墨的Java程序
import javax.net.SocketFactory;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import static java.nio.charset.StandardCharsets.UTF_8;
public class PickledGraphiteSocketDemo {
public static void main(String[] args) throws Exception {
InetSocketAddress sa = new InetSocketAddress("localhost",2004);
Socket socket = SocketFactory.getDefault().createSocket(sa.getAddress(),sa.getPort());
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream(),UTF_8);
BufferedWriter writer = new BufferedWriter(osw);
while (true) {
System.out.println("socket.isConnected(): " + socket.isConnected() + "\t socket.isClosed(): " + socket.isClosed() + "\t socket.isBound():" + socket.isBound() + "\t socket.isInputShutdown():" + socket.isInputShutdown() + "\t socket.isOutputShutdown():" + socket.isOutputShutdown());
Thread.sleep(10000);
}
}
}
当我运行它生成的程序时,会连续输出以下
socket.isConnected(): true socket.isClosed(): false socket.isBound():true socket.isInputShutdown():false socket.isOutputShutdown():false
socket.isConnected(): true socket.isClosed(): false socket.isBound():true socket.isInputShutdown():false socket.isOutputShutdown():false
socket.isConnected(): true socket.isClosed(): false socket.isBound():true socket.isInputShutdown():false socket.isOutputShutdown():false
现在我关闭了我的石墨服务器,它仍然在控制台中输出相同的结果。
现在我的问题是,为什么java.net.Socket
接口没有在结果中反映连接关闭。
我做错了什么?如何确定服务器已关闭?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。