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但要实现这一点,我真的需要让我的用户连接到服务器,而不是在每次请求后关闭连接。