Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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 TCP连接-在相同的客户端请求之间保持相同的连接_Java_Sockets_Tcp Ip - Fatal编程技术网

Java TCP连接-在相同的客户端请求之间保持相同的连接

Java TCP连接-在相同的客户端请求之间保持相同的连接,java,sockets,tcp-ip,Java,Sockets,Tcp Ip,我正在尝试为学校项目编写登录和注册服务代码。 如果我在每个请求上创建一个到服务器的新连接,我就可以实现这一点 我想要的是在登录时保持相同的连接 带有响应的服务器部件: try{ welcomeSocket = new ServerSocket(port); }catch(Exception e){ System.out.println("Server Error: " + e); } while(true) {

我正在尝试为学校项目编写登录和注册服务代码。 如果我在每个请求上创建一个到服务器的新连接,我就可以实现这一点

我想要的是在登录时保持相同的连接

带有响应的服务器部件:

    try{
        welcomeSocket = new ServerSocket(port); 
    }catch(Exception e){
        System.out.println("Server Error: " + e);
    }
    while(true) { 
        try{    
            connectionSocket = welcomeSocket.accept(); 
            System.out.println(connectionSocket.toString());
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 

            clientRequest = inFromClient.readLine().split(" ");
        }catch(Exception e){
        System.out.println("Server Error: " + e);
        }
   }





public static void sendResponse(String response){

    try{
        DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());    
        outToClient.writeBytes(response);
        connectionSocket.close();

    }catch(Exception e){
        System.out.println("Connection Error: " + e);
    }
}
客户方:

inFromUser = new BufferedReader(new InputStreamReader(System.in));

    while(true){
            System.out.print("\nCommand: ");
            try{
                command = inFromUser.readLine();

                clientSocket = new Socket(hostname,port);
                outToServer = new DataOutputStream(clientSocket.getOutputStream());
                inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));


                outToServer.writeBytes(command + '\n');                 
                serverResponse = inFromServer.readLine();                   
                System.out.println("FROM SERVER: " + serverResponse);



            }catch(Exception e){
                System.out.println("Client Error - " + e.getMessage());
            }               
    }
这就像这样工作,每次都创建新的连接。 现在,如果我只在套接字为null时在客户端创建新套接字,而不关闭服务器端的connectionSocket,那么它会向服务器发送消息,但在关闭connectionSocket之前不会从服务器收到响应

有人知道为什么或者想让它在单个连接上工作吗? 我已经读了很多关于这方面的书,但是我想不出来


提前感谢。

HTTP是无连接的:HTTP客户端ie浏览器启动HTTP请求,请求发出后, 客户端断开与服务器的连接并等待响应。服务器处理请求并重新建立 与客户端的连接,以将响应发送回

HTTP/1.0为每个请求/响应交换使用一个新连接,其中可以使用HTTP/1.1连接
用于一个或多个请求/响应交换。

是否尝试在调试器中单步执行?您的问题是在阅读了一行之后挂起了ServerSocket.Accept()。您必须将接受和处理它的连接拆分为单独的线程。因此HTTP/1.1是持久的。我如何使用它呢?我真的需要一个持久连接才能使用登录和仅登录命令。@IvanFreire您想实现什么?你有一些应用程序协议吗?首先,你的应用程序在做什么?通过这些连接将传达什么?这是一种twitter。首先,您必须注册一个这样工作的用户,因为它可以为每个寄存器创建一个新的连接。但是它也需要登录。登录后,我必须保持连接,以便向其他登录用户发送消息,并检查其他用户发送的消息。我读了你的另一篇评论,试图了解多线程是如何工作的。@IvanFreire所以在你的方法中,只有登录的用户才能相互“交谈”。因此,它更像是在线聊天,而不是twitter。当你离线时,你将错过所有发送的消息…这只是一个学校项目,不是一个实际的应用程序:p但要实现这一点,我真的需要让我的用户连接到服务器,而不是在每次请求后关闭连接。