使用python编写TCP客户端和服务器,客户端可以用http协议发送请求,服务器可以应答该请求并响应相应的html文档
时间: 2024-12-15 07:15:48 浏览: 1
Python-Socket.zip
5星 · 资源好评率100%
在Python中,你可以使用socket库来编写TCP客户端和服务器。由于HTTP是一个基于TCP的协议,所以我们可以使用原始套接字交互来模拟HTTP通信。然而,这通常不会像真正的HTTP服务器那样提供完整的路由、头部解析等复杂功能,而是更适用于学习和理解网络通信的基本原理。
**服务器端示例:**
```python
import socket
from http.server import BaseHTTPRequestHandler, SimpleHTTPRequestHandler, HTTPServer
# 创建一个服务器实例
class MyTCPServer(SimpleHTTPRequestHandler):
protocol_version = "HTTP/1.0"
def do_GET(self):
# 模拟HTTP响应
response = f"HTTP/1.0 200 OK\n\n<!DOCTYPE html>\n<html><body>Response from Server</body></html>"
self.wfile.write(response.encode())
# 启动服务器
if __name__ == "__main__":
server_address = ('', 8080)
httpd = HTTPServer(server_address, MyTCPServer)
print(f"Starting TCP server on {server_address[0]}:{server_address[1]}...")
httpd.serve_forever()
```
**客户端示例:**
```python
import socket
import requests
def send_http_request(url="http://localhost:8080"):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect(("localhost", 8080))
request = b"GET / HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n"
sock.sendall(request)
data = ""
while True:
chunk = sock.recv(4096)
if not chunk:
break
data += chunk.decode()
return data
response = send_http_request()
print("Client received:", response)
```
这里,客户端通过套接字直接发送HTTP GET请求,并接收服务器的"模拟"响应。注意,这个过程并没有实际的HTTP头部解析和请求处理,仅作演示之用。
阅读全文