我正在尝试使用 ServerSockets
编写一个简单的 Java 程序,它将向浏览器发送一些 HTML 代码。这是我的代码:
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(55555);
} catch (IOException e) {
System.err.println("Could not listen on port: 55555.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
if(clientSocket != null) {
System.out.println("Connected");
}
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
out.println("HTTP/1.1 200 OK");
out.println("Content-Type: text/html");
out.println("\r\n");
out.println("<p> Hello world </p>");
out.flush();
out.close();
clientSocket.close();
serverSocket.close();
然后,我在浏览器中转到 localhost:55555
,但没有任何显示。我知道连接正在工作,因为程序在 if 语句中输出“已连接”。我也尝试过从 inputStream 输出数据并且有效。但是我试图在浏览器中输出的文本根本没有显示,程序运行完毕,我得到了一个
“问题加载页面 - 连接已重置”
在我的浏览器中,但没有文本。
我已经在互联网上搜索过,似乎其他人都以这种方式编码,但他们的文本显示正常,他们还有其他问题。我怎样才能解决这个问题?
原文由 ALR 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在 Chrome、Firefox、IE 和 Opera 中测试了您的代码并且它有效。
但是,我建议您使用多线程并从本质上产生一个新线程来处理每个新请求。
您可以创建一个实现 runnable 并在构造函数中采用 clientSocket 的类。这实质上将使您的自定义网络服务器能够同时接受多个请求。
如果您想处理多个请求,您还需要一个 while 循环。
很好的阅读证明了上述内容: https ://web.archive.org/web/20130525092305/http://www.prasannatech.net/2008/10/simple-http-server-java.html
如果网络存档不起作用,我将发布下面的代码(取自上面):
享受!