Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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_Android - Fatal编程技术网

Java 客户端断开连接时服务器挂起

Java 客户端断开连接时服务器挂起,java,android,Java,Android,每当任何客户端断开与服务器的连接时,我都会创建一个多客户端/服务器应用程序 我的服务器挂起了。 我如何设置任何条件,让我随时打印一些消息 任何客户端都会断开与服务器的连接 这是我的服务器代码 class ServerThread implements Runnable { public void run() { Socket socket = null; try { System.out.println("server start

每当任何客户端断开与服务器的连接时,我都会创建一个多客户端/服务器应用程序 我的服务器挂起了。 我如何设置任何条件,让我随时打印一些消息 任何客户端都会断开与服务器的连接 这是我的服务器代码

class ServerThread implements Runnable {

    public void run() {
        Socket socket = null;
        try {
            System.out.println("server starting.......");
            serverSocket = new ServerSocket(SERVERPORT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        while (!Thread.currentThread().isInterrupted()) {

            try {
                System.out.println("Ready to accept.......");
                socket = serverSocket.accept();

                System.out.println(" client Connected with ip address =" +socket.getRemoteSocketAddress().toString());

                CommunicationThread commThread = new CommunicationThread(socket);
                new Thread(commThread).start();

            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("catch block");

            }

        }
    }
}

class CommunicationThread implements Runnable {

    private Socket clientSocket;

    private BufferedReader input;

    public CommunicationThread(Socket clientSocket) {

        this.clientSocket = clientSocket;

        try {

            this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void run() {


        while (!Thread.currentThread().isInterrupted()) {

            try {

                String read = input.readLine();

                updateConversationHandler.post(new updateUIThread(read));

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

任何帮助都将不胜感激

不清楚您的意思是因为对话结束(即:一切顺利完成)而断开连接,还是因为某些网络问题(或客户端取消了请求)而断开连接

如果是第一种情况,那么很简单:您使用的协议(您自己的,或http,或其他)负责定义如何确定对话结束。如果出现这种情况,您只需关闭插座

如果是第二种情况,那么您必须有一个适当的算法来确定连接是否必须关闭。例如,通过实现超时或慢速读取阈值。请参阅,以获取有关如何设置超时的说明


同样值得注意的是,当你想练习或学习一些东西时,创建自己的服务器是可以的,但最好使用现有的解决方案,例如vert.x或Wildfly的精简版。如今,这类服务器的开销非常低,同时仍然提供非常强大的网络功能

怎么挂?它停止接受任何新的连接,或者只是通信读卡?我有一个文本视图,我将从客户端收到的所有消息都设置为该视图。但是,每当任何客户端断开连接时,textview都会显示客户端说:null,这在循环中继续,最后我的应用程序崩溃。是的,只需在某个端口上侦听以接收字符串,如果接收到某个内容,请停止服务器:)当客户端因网络问题而断开连接时,服务器会挂起。如何准确地处理?我有一个文本视图,我正在设置从客户端接收的所有消息。但当任何客户端断开连接时,textview在循环中连续显示“null”并最终崩溃,您的客户端和服务器都必须处理网络连接问题。正如我提到的,Socket类提供了一个超时,您可以处理这种情况。但要考虑的情况远不止这一个,因此我建议使用真正的服务器实现。