编写一个TCP Socket的客户端和服务器端程序,实现如下功能: (1) 客户端程序向服务器端程序发出问候信息,内容自定 (2) 服务器端接收信息并显示信息,同时向客户端回送信息,回送内容自定 (3) 分别在DOS命令提示符界面中运行服务器和客户端程序,查看实验结果 (4) 在DOS界面中运行服务器程序,使用浏览器访问该服务器,观察服务器端获得的信息,查看浏览器中“开发者模式”network标签中显示的客户端请求信息,对比二者的内容,并予以解释说明。
时间: 2023-05-27 13:05:28 浏览: 49
以下是Python实现TCP Socket的客户端和服务器端程序:
服务器端程序:
```python
import socket
HOST = '127.0.0.1'
PORT = 8888
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
print('Server is listening on {}:{}'.format(HOST, PORT))
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
print('Received message: {}'.format(data.decode()))
conn.sendall(b'Hello, client!')
```
客户端程序:
```python
import socket
HOST = '127.0.0.1'
PORT = 8888
MESSAGE = 'Hello, server!'
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(MESSAGE.encode())
data = s.recv(1024)
print('Received message: {}'.format(data.decode()))
```
运行结果:
在DOS命令提示符界面中先运行服务器程序:
```
> python server.py
Server is listening on 127.0.0.1:8888
```
然后再运行客户端程序:
```
> python client.py
Received message: Hello, client!
```
可以看到客户端向服务器发送了一条问候信息,服务器接收到并显示了该信息,并回送了一条信息给客户端。
使用浏览器访问服务器:
在DOS界面中运行服务器程序后,在浏览器中输入地址`http://127.0.0.1:8888`访问该服务器。此时服务器端的输出为:
```
Connected by ('127.0.0.1', 52227)
Received message: GET / HTTP/1.1
Host: 127.0.0.1:8888
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
```
可以看到浏览器向服务器发送了一个GET请求,并携带了一些请求头信息。服务器接收到该请求并输出了请求信息。
在浏览器的“开发者模式”中的network标签中可以看到客户端请求信息,如下图所示:
![network](https://i.ibb.co/6Rt1YFj/network.png)
可以看到客户端向服务器发送了一条消息`Hello, server!`。和之前在DOS界面中运行客户端程序时的请求结果一致。