---------------------------
socketserver |
---------------------------
* socketserver Ä£¿éÊÇ¶Ô socket µÄ·â×°
* ÓеãʼþÇý¶¯µÄÒâ˼
* ÀàÌåϵ
BaseServer(Server×î¶¥²ãÀà)
|-TCPServer
|-ThreadingTCPServer(Ö§³Ö¶àÏ̵߳ÄTCPServer)
|-ForkingTCPServer(Ö§³Ö¶à½ø³ÌµÄTCPServer,½ö½öÔÚunixÓÐЧ)
|-UnixStreamServer
|-UDPServer
|-ThreadingUDPServer(Ö§³Ö¶àÏ̵߳ÄUDPServer)
|-ForkingUDPServer(Ö§³Ö¶à½ø³ÌµÄUDPServer,½ö½öÔÚunixÓÐЧ))
|-UnixDatagramServer
|-HTTPServer
|-WSGIServer
BaseRequestHandler(Handle¶¥²ãÀà)
|-StreamRequestHandler
|-BaseHTTPRequestHandler
|-WSGIRequestHandler
* BaseServer µÄһЩ·½·¨,ÔÚÓÐÌØÊâÐèÇóµÄʱºò¿ÉÒÔ×Ô¼º¸²Ð´
server_bind()
* °ó¶¨¼àÌý
* BaseServer µÄһЩÊôÐÔ
allow_reuse_address
* ĬÈÏΪ False,ÊÇ·ñÔÊÐí¶Ë¿Ú¸´ÓÃ
---------------------------
tcp |
---------------------------
import socketserver
class Handler(socketserver.BaseRequestHandler):
def handle(self):
self.request # ¿Í»§¶Ësocket¶ÔÏó
# socket.socket fd=552, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 1024), raddr=('127.0.0.1', 3875)>
self.client_address # ¿Í»§¶ËµØÖ·
# ('127.0.0.1', 3875)
self.server # µ±Ç°Server
#
server = socketserver.ThreadingTCPServer(('localhost',1024),Handler)
server.serve_forever()
---------------------------
udp |
---------------------------
import socketserver
class Handler(socketserver.BaseRequestHandler):
def handle(self):
self.request # ¿Í»§¶Ësocket¶ÔÏó,µÚÒ»¸ö²ÎÊý¾ÍÊÇudpµÄÊý¾Ý
# (b'Hello,Python', )
self.client_address # ¿Í»§¶ËµØÖ·
# ('127.0.0.1', 3875)
self.server # µ±Ç°Server
#
server = socketserver.ThreadingUDPServer(('localhost',1024),Handler)
server.serve_forever()
---------------------------
httpÎļþĿ¼ |
---------------------------
from http.server import SimpleHTTPRequestHandler
import socketserver
httpd = socketserver.TCPServer(('localhost', 3025), SimpleHTTPRequestHandler)
httpd.serve_forever()
---------------------------
ÎļþÉÏ´« |
---------------------------
# ¿Í»§¶Ë
import socket
import os
client = socket.socket()
client.connect(('localhost',1024))
target_file = "D:\\eclipse-jee-oxygen-M7-win32-x86_64.zip"
with open(target_file,'rb') as file:
print('Îļþ´óС:%s'%(os.stat(target_file).st_size))
client.sendall(file.read())
client.shutdown(socket.SHUT_WR)
# ·þÎñ¶Ë
from socketserver import ThreadingTCPServer,BaseRequestHandler
target_file = "E:\\eclipse-jee-oxygen-M7-win32-x86_64.zip"
class Handle(BaseRequestHandler):
def handle(self):
request = self.request
with open(target_file,'wb') as file:
while True:
data = request.recv(2048)
print('ÒѾ½ÓÊÕ:%s'%(len(data)))
if len(data) == 0:
break
file.write(data)
file.flush()
request.close()
server = ThreadingTCPServer(('localhost',1024),Handle)
server.serve_forever()