无法从 java 服务器应用程序获得响应

Cannot get response from java server app

我有下面的代码,这是一个非常基本的服务器。在浏览器中,我输入类似:localhost:6789/xxxx。当应用程序 运行 时,它确实从客户端读取请求,但随后显示消息 "This site can’t be reached" 并且应用程序抛出异常。回应客户的最佳方式是什么?

import java.net.*;
import java.io.*;
import java.net.Socket;

public class URLConnection {
    public static void main(String[] args)throws IOException {
        String clientSentence;
        ServerSocket welcomeSocket = new ServerSocket(6789);

        while (true) {
         Socket connectionSocket = welcomeSocket.accept();
         BufferedReader inFromClient =
          new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
         DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
         clientSentence = inFromClient.readLine();
         System.out.println("Received: " + clientSentence);
         outToClient.writeBytes("HTTP/1.1 200 OK");
        }
    }

}

您必须关闭 OutputStream:

    while (true) {
        Socket connectionSocket = welcomeSocket.accept();
        BufferedReader inFromClient =
                new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
        clientSentence = inFromClient.readLine();
        System.out.println("Received: " + clientSentence);
        outToClient.writeBytes("HTTP/1.1 200 OK");
        outToClient.close();
    }

请注意

  • 请求不一定是 HTTP 1.1,因此您的响应无效。
  • 实际上会有几个clientSentence(即考虑如下添加一个循环)

    while (true) {
        Socket connectionSocket = welcomeSocket.accept();
        BufferedReader inFromClient =
                new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
    
        while(true) {
            clientSentence = inFromClient.readLine();
            if (clientSentence != null && clientSentence.trim().isEmpty()) {
                break;
            } else {
                System.out.println("Received: " + clientSentence);
            }
        }
    
        outToClient.writeBytes("HTTP/1.1 200 OK\n\nHello world");
        outToClient.close();