繁体   English   中英

Java检测客户端中与服务器的断开连接

[英]Java detect disconnect from Server in Client

我制作了一个具有客户端和服务器端的Java应用程序。 双方通过插座进行通讯。 在我的服务器应用程序被某种东西杀死并且无法关闭或关闭服务器插座之前,这种方法可以正常工作。

客户端似乎没有注意到断开的连接,只是在尝试读取下一个对象时挂起了自己。

我还尝试每隔5秒从客户端发送一个测试对象,以检测服务器是否处于脱机状态,但这也不起作用。

我可能不得不提到,仅当在Windows上运行服务器应用程序和在Linux上运行客户端(VirtualBox中的Ubuntu)时,才会发生这种情况。 Windows-Windows可以正常工作。 Netstat甚至让我在Linux上建立了,尽管我已经杀死了服务器。

客户代码:

requestSocket = new Socket("192.168.1.3", 1234);
out = new ObjectOutputStream(new CipherOutputStream(requestSocket.getOutputStream(), ec));

in = new ObjectInputStream(new CipherInputStream(requestSocket.getInputStream(), dc));

new Thread() {
    public void run() {
        while(true) {
            try {
                out.writeObject(obj);
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("sent");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {}
        }
    }
}.start();

服务器代码:

serverSocket = new ServerSocket(1234);
socket = serverSocket.accept();
out = new ObjectOutputStream(new CipherOutputStream(clientSocket.getOutputStream(), ec));
in = new ObjectInputStream(new CipherInputStream(clientSocket.getInputStream(), dc));

//do-while-reading on the socket[...]

我读了多个线程,这些线程告诉我如何在服务器端检测到丢失的连接,但找不到客户端的任何连接,或者答案对我不起作用。

在套接字上设置一个合适的持续时间的读取超时,足以包括所有正常传输,并捕获SocketTimeoutException.

问题似乎出在虚拟机上。 在装有Manjaro Linux的笔记本电脑上对其进行测试时,一切开始时都应正常工作!

无论如何,谢谢您的贡献。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM