Skip to content

Commit c571e02

Browse files
http server (examplehub#184)
1 parent eaa4281 commit c571e02

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.examplehub.basics.network;
2+
3+
import java.io.*;
4+
import java.net.ServerSocket;
5+
import java.net.Socket;
6+
import java.nio.charset.StandardCharsets;
7+
8+
public class HttpServerExample {
9+
public static void main(String[] args) throws IOException {
10+
ServerSocket ss = new ServerSocket(8080);
11+
System.out.println("server is running...");
12+
for (;;) {
13+
Socket sock = ss.accept();
14+
System.out.println("connected from " + sock.getRemoteSocketAddress());
15+
new Handler(sock).start();
16+
}
17+
}
18+
}
19+
class Handler extends Thread {
20+
Socket sock;
21+
22+
public Handler(Socket sock) {
23+
this.sock = sock;
24+
}
25+
26+
public void run() {
27+
try (InputStream input = this.sock.getInputStream()) {
28+
try (OutputStream output = this.sock.getOutputStream()) {
29+
handle(input, output);
30+
}
31+
} catch (Exception e) {
32+
try {
33+
this.sock.close();
34+
} catch (IOException ioe) {
35+
}
36+
System.out.println("client disconnected.");
37+
}
38+
}
39+
40+
private void handle(InputStream input, OutputStream output) throws IOException {
41+
var reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
42+
var writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));
43+
// TODO: 处理HTTP请求
44+
// 读取HTTP请求:
45+
boolean requestOk = false;
46+
String first = reader.readLine();
47+
if (first.startsWith("GET / HTTP/1.")) {
48+
requestOk = true;
49+
}
50+
for (;;) {
51+
String header = reader.readLine();
52+
if (header.isEmpty()) { // 读取到空行时, HTTP Header读取完毕
53+
break;
54+
}
55+
System.out.println(header);
56+
}
57+
System.out.println(requestOk ? "Response OK" : "Response Error");
58+
if (!requestOk) {
59+
// 发送错误响应:
60+
writer.write("HTTP/1.0 404 Not Found\r\n");
61+
writer.write("Content-Length: 0\r\n");
62+
writer.write("\r\n");
63+
} else {
64+
// 发送成功响应:
65+
String data = "<html><body><h1>Hello, world!</h1></body></html>";
66+
int length = data.getBytes(StandardCharsets.UTF_8).length;
67+
writer.write("HTTP/1.0 200 OK\r\n");
68+
writer.write("Connection: close\r\n");
69+
writer.write("Content-Type: text/html\r\n");
70+
writer.write("Content-Length: " + length + "\r\n");
71+
writer.write("\r\n"); // 空行标识Header和Body的分隔
72+
writer.write(data);
73+
}
74+
writer.flush();
75+
}
76+
}

0 commit comments

Comments
 (0)