gpt4 book ai didi

java - 为什么 Chrome 不呈现从套接字输出流中获取的页面? java

转载 作者:可可西里 更新时间:2023-11-01 16:36:20 24 4
gpt4 key购买 nike

这是我的代码:

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

class Server
{
public static void main(String args[])
{
try
{
ServerSocket svr = new ServerSocket(8900);
System.out.println("waiting for request");
Socket s = svr.accept();
System.out.println("got a request");
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();

int x;
byte data[]= new byte[1024];

x = in.read(data);

String response = "<html><head><title>HTML content via java socket</title></head><body><h2>Hi! Every Body.</h2></body></html>";
out.write(response.getBytes());
out.flush();

s.close();
svr.close();
System.out.println("closing all");
}
catch(Exception ex)
{
System.out.println("Err : " + ex);
}
}
}

运行它我希望直接访问 Chrome:127.0.0.1:8900 并获得漂亮的 html 片段,但实际上 Chrome 说的是以下内容:

这个页面不工作
127.0.0.1 发送了无效响应。
ERR_INVALID_HTTP_RESPONSE

而我的 Server.java 正在按我希望的方式运行。 Eclipse 中的控制台在连接后显示得很好:

等待请求
收到请求
关闭所有

所以我很卡。请帮我解决这个问题。

最佳答案

您正在撰写的回复对于 chrome 来说肯定是不可读的。因为它不包含有关 header 中响应的任何信息

您的代码实际上是发送响应。您可以使用 curl 检查它。以下代码将帮助您在 chrome 中获得响应。

        ServerSocket svr = new ServerSocket(8900);
System.out.println("waiting for request");
Socket s = svr.accept();
System.out.println("got a request");
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();

int x;
byte data[] = new byte[1024];

x = in.read(data);

String t = "HTTP/1.1 200 OK\r\n";
byte[] bb = t.getBytes("UTF-8");
out.write(bb);

t = "Content-Length: 124\r\n";
bb = t.getBytes("UTF-8");
out.write(bb);
t = "Content-Type: text/html\r\n\r\n";
bb = t.getBytes("UTF-8");
out.write(bb);

String response = "<html><head><title>HTML content via java socket</title></head><body><h2>Hi! Every Body.</h2></body></html>";
out.write(response.getBytes("UTF-8"));

t = "Connection: Closed";
bb = t.getBytes("UTF-8");
out.write(bb);

out.flush();

s.close();
svr.close();
System.out.println("closing all");

重要的是,如果您更改了response,那么您必须计算Content-Length:,因为它将是您的response 的长度 byte[] 和 Connection: Closed 字符串的 byte[]。

关于java - 为什么 Chrome 不呈现从套接字输出流中获取的页面? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com