正在努力学习的小白袁 2023-10-03 18:10 采纳率: 90%
浏览 12
已结题

java的Socket连接后在浏览器输入地址端口后发现localhost发送的响应无效


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


public class Main {
    //自制简单的Web服务器
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9998);

        while (!serverSocket.isClosed()) {
            System.out.println("=====端口服务端已建立,正在等待连接=====");
            Socket socket = serverSocket.accept();
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("hello i an tomcat\n".getBytes());

            outputStream.close();
            socket.close();
        }
        serverSocket.close();
    }
    }

img

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-03 18:38
    关注

    引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    这个问题可能是因为在浏览器中直接输入地址和端口时,默认使用的是HTTP协议进行连接,而你的代码中只是简单的发送了一个字符串,并没有按照HTTP协议的格式进行返回响应。

    要解决这个问题,你可以修改你的代码,按照HTTP协议的格式返回一个响应。示例如下:

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Main {
        //自制简单的Web服务器
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = new ServerSocket(9998);
    
            while (!serverSocket.isClosed()) {
                System.out.println("=====端口服务端已建立,正在等待连接=====");
                Socket socket = serverSocket.accept();
    
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String request = reader.readLine();
                System.out.println("收到请求:" + request);
    
                OutputStream outputStream = socket.getOutputStream();
    
                // 根据请求的路径判断返回的内容
                if (request.startsWith("GET")) {
                    String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nhello i am tomcat";
                    outputStream.write(response.getBytes());
                } else {
                    String response = "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\n\r\n404 Not Found";
                    outputStream.write(response.getBytes());
                }
    
                outputStream.close();
                reader.close();
                socket.close();
            }
            serverSocket.close();
        }
    }
    

    在上面的代码中,首先通过BufferedReader读取了浏览器发送的请求,然后根据请求的内容判断返回的内容。如果请求以"GET"开头,则返回一个200 OK的响应,内容为"hello i am tomcat";否则返回一个404 Not Found的响应,内容为"404 Not Found"。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月11日
  • 已采纳回答 10月3日
  • 修改了问题 10月3日
  • 创建了问题 10月3日

悬赏问题

  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 python的EOFError该怎么解决?
  • ¥15 Fluent,液体进入旋转区域体积分数不连续
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包
  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 layui数据重载无效
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程