1: 创建一个简单的 HTTP 服务器
为了在本地网络中共享文件或托管简单的网站(HTML 和 JavaScript),你可以使用 Python 内置的 SimpleHTTPServer 模块。Python 应该在你的环境变量 Path 中。进入存放文件的文件夹并输入以下命令:
$ python3 -m http.server
如果未指定端口号,默认端口为 8000。因此,输出将是:
Serving HTTP on 0.0.0.0 port 8000 ...
你可以通过在本地网络中连接的任何设备上输入以下地址来访问你的文件:
http://主机IP地址:8000/
主机IP地址 是你的本地 IP 地址,通常以 192.168.x.x 开头。

要结束模块,只需按下 Ctrl+C。
2 节:创建一个 TCP 服务器
你可以使用 socketserver 库来创建一个 TCP 服务器。以下是一个简单的回声服务器。
服务器端
from socketserver import BaseRequestHandler, TCPServer
class EchoHandler(BaseRequestHandler):
def handle(self):
print('connection from:', self.client_address)
while True:
msg = self.request.recv(8192)
if not msg:
break
self.request.send(msg)
if __name__ == '__main__':
server = TCPServer(('', 5000), EchoHandler)
server.serve_forever()
客户端
from socket import socket, AF_INET, SOCK_STREAM
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(('localhost', 5000))
sock.send(b'Monty Python')
sock.recv(8192) # returns b'Monty Python'
socketserver 使得创建简单的 TCP 服务器相对容易。然而,你应该注意,默认情况下,服务器是单线程的,一次只能为一个客户端服务。如果你想要处理多个客户端,可以使用 ThreadingTCPServer。
from socketserver import ThreadingTCPServer
...
if __name__ == '__main__':
server = ThreadingTCPServer(('', 5000), EchoHandler)
server.serve_forever()
3: 创建一个 UDP 服务器
使用 socketserver 库可以轻松创建一个 UDP 服务器。
以下是一个简单的时钟服务器:
import time
from socketserver import BaseRequestHandler, UDPServer
class CtimeHandler(BaseRequestHandler):
def handle(self):
print('connection from: ', self.client_address)
# 获取消息和客户端套接字
msg, sock = self.request
resp = time.ctime()
sock.sendto(resp.encode('ascii'), self.client_address)
if __name__ == '__main__':
server = UDPServer(('', 5000), CtimeHandler)
server.serve_forever()
测试:
>>> from socket import socket, AF_INET, SOCK_DGRAM
>>> sock = socket(AF_INET, SOCK_DGRAM)
>>> sick.sendto(b'', ('localhost', 5000))
0
>>> sock.recvfrom(8192)
(b'Wed Aug 15 20:35:08 2012', ('127.0.0.1', 5000))
4: 在一个线程中启动简单的 HTTP 服务器并打开浏览器
如果你的程序在运行过程中输出网页,这将非常有用。
from http.server import HTTPServer, CGIHTTPRequestHandler
import webbrowser
import threading
def start_server(path, port=8000):
'''在指定端口上启动一个简单的 Web 服务器,提供指定路径的内容'''
os.chdir(path)
httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
httpd.serve_forever()
# 在新线程中启动服务器
port = 8000
daemon = threading.Thread(name='daemon_server',
target=start_server,
args=('.', port))
daemon.setDaemon(True) # 设置为守护线程,主线程结束后将被杀死
daemon.start()
# 打开 Web 浏览器
webbrowser.open('http://localhost:{}'.format(port))
5: 最简单的 Python 套接字客户端-服务器
示例
服务器端:
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 8089))
serversocket.listen(5) # become a server socket, maximum 5 connections
while True:
connection, address = serversocket.accept()
buf = connection.recv(64)
if len(buf) > 0:
print(buf)
break
客户端:
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 8089))
clientsocket.send('hello'.encode(''))
运行步骤:
首先运行服务器端代码(SocketServer.py),确保服务器已准备好监听/接收数据。

然后客户端发送信息到服务器。

服务器接收到数据后,程序终止。
