gpt4 book ai didi

java - 使用 Java Socket 发送 HTTP 响应时遇到问题

转载 作者:搜寻专家 更新时间:2023-11-01 01:11:01 24 4
gpt4 key购买 nike

我一直在尝试编写一个简单的 Web 服务器的开头部分,但似乎无法获得要发送的响应。我已经尝试了所有可以想象到的输出流类型,但似乎没有任何效果。我不知所措。这是我正在使用的两个类,对于一些无关的代码感到抱歉:

package edu.xsi.webserver;

import java.io.IOException;
import java.net.ServerSocket;


public class WebServer {

int port;
ServerSocket server;

public WebServer(int port) throws IOException{

this.port = port;
this.server = new ServerSocket(port);
Thread t = new Thread(new ServerExec());
t.start();

}

public class ServerExec implements Runnable {

public void run(){

int i = 0;
while (true) {

try {
new WebSession(server.accept(), i++);
System.out.println("Should print before session");
} catch (IOException e) {
e.printStackTrace();
}

}
}


}

public static void main(String[] args) {

try {
WebServer webServer = new WebServer(8888);
} catch (IOException e) {
e.printStackTrace();
}
}
}

这是处理响应的 session 类。

package edu.xsi.webserver;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class WebSession implements Runnable {

Socket client;
int num;

public WebSession(Socket client, int num) {

this.num = num;
this.client = client;
Thread t = new Thread(this);
t.start();
}


public void run() {

Scanner s = null;
DataOutputStream out = null;

try {

s = new Scanner(client.getInputStream());
out = new DataOutputStream(client.getOutputStream());

//Get all input from header
while (s.hasNextLine()) {
System.out.println(s.nextLine());
}
out.writeBytes("HTTP/1.1 200 OK\r\n");
out.writeBytes("Content-Type: text/html\r\n\r\n");
out.writeBytes("<html><head></head><body><h1>Hello</h1></body></html>");

s.close();
out.flush();
out.close();

} catch(IOException ioe) {

ioe.printStackTrace();
}

}

最佳答案

我一直在为一个非常相似的问题而疯狂地挣扎。

在字面上用头带撞墙后,我发现我的问题太微不足道了,我继续用头撞墙一段时间。

基本上在我的输入 while 循环中,我正在检查空行,但我忘记检查空行(并随后中断)。

不能保证它对你的效果一样,但这是我的一分钱:

in = session.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
// this seems to be the key for me!
// somehow I never get out of this loop if I don't
// check for an empty line...
if (line.isEmpty()) {
break;
}
}
out = new BufferedWriter(
new OutputStreamWriter(
new BufferedOutputStream(session.getOutputStream()), "UTF-8")
);
out.write(OUTPUT_HEADERS + OUTPUT.length() + OUTPUT_END_OF_HEADERS + OUTPUT);
out.flush();
out.close();
session.close();

我的常量是:

private static final String OUTPUT = "<html><head><title>Example</title></head><body><p>Worked!!!</p></body></html>";
private static final String OUTPUT_HEADERS = "HTTP/1.1 200 OK\r\n" +
"Content-Type: text/html\r\n" +
"Content-Length: ";
private static final String OUTPUT_END_OF_HEADERS = "\r\n\r\n";

我的“ session ”变量是一个Socket 对象。

关于java - 使用 Java Socket 发送 HTTP 响应时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638848/

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