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