为什么`java.net.Socket`接口无法反映服务器连接关闭

时间:2020-08-13 21:47:45

标签: java sockets

我正在使用以下命令在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接口没有在结果中反映连接关闭。 我做错了什么?如何确定服务器已关闭?

0 个答案:

没有答案