我正在尝试为学校项目编写登录和注册服务。 如果我在每个请求上创建一个与服务器的新连接,我就可以使用它。
我想要的是在登录时保持相同的连接。
带响应的服务器部分:
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);
}
}
Cliente方面:
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());
}
}
这样做很好,每次都创建新的连接。 现在,如果我在套接字为空时只在客户端创建新套接字并且不关闭服务器端的connectionSocket,它会向服务器发送一条消息,但在connectionSocket关闭之前永远不会从服务器获得响应。
任何人都知道为什么或想法让它在单个连接上工作? 已经阅读了很多关于这一点,并且无法解决这个问题。
提前致谢。
答案 0 :(得分:0)
HTTP是无连接的: HTTP客户端即。浏览器启动HTTP请求,并在发出请求后, 客户端断开与服务器的连接并等待响应。服务器处理请求并重新建立 与客户端的连接以发回响应。
HTTP / 1.0为每个请求/响应交换使用新连接,其中可以使用HTTP / 1.1连接 用于一个或多个请求/响应交换。