最近学了Socket,对网络方面有了新的了解,结合之前对HTTP协议的了解,我尝试使用JAVA/Python写了一个啥都不能干的Web服务器,以加深对这些知识点的印象。

## JAVA部分,只相应GET请求并返回请求路径

### 效果

![file](https://imzdx.top/usr/uploads/2021/08/3739507772.png)

### 代码

```java
package day24;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

/**
* @author Renxing
*/
public class HelloWeb {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
//建立Socket并等待链接
Socket client = serverSocket.accept();
//获取输入流并保存到request
InputStream in = client.getInputStream();
BufferedReader buf = new BufferedReader(new InputStreamReader(in));
StringBuilder builder = new StringBuilder();
while (buf.ready()) {
builder.append(buf.readLine()).append("/n");
}
String request = builder.toString();
//分割HTTP请求头,判断请求方法,若是GET则获取输出流并输出响应头及内容
String[] s = request.split(" ");
OutputStream out = client.getOutputStream();
if (s[0].equalsIgnoreCase("GET")) {
//这里应注意编码问题,响应头需与内容编码相对应
String response = "HTTP/1.1 200 OK\n" +
"Content-Type: text/html;charset=UTF-8\n" +
"\n" +
"你的路径是:" + s[1];
out.write(response.getBytes(StandardCharsets.UTF_8));
}
//资源回收
in.close();
out.close();
client.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}

}COPY
```

## Python部分(这个确实是网上嫖的…比JAVA实现的功能还简单..)

### 效果

![file](https://imzdx.top/usr/uploads/2021/08/3105176149.png)

### 代码

```python
import socket

HOST, PORT = '', 8888

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print('Serving HTTP on port %s ...' % PORT)
while True:
client_connection, client_address = listen_socket.accept()
request = client_connection.recv(1024)
print(request.decode("utf-8"))

http_response = """\
HTTP/1.1 200 OK

Hello, World!
"""
client_connection.sendall(http_response.encode("utf-8"))
client_connection.close()
```

```

Last modification:August 26, 2021
如果觉得我的文章对你有用,请随意赞赏