1. socketserver简介:
python3提供了标准库socketserver,用于创建服务端,客户端网络程序。它对socket进行了封装,用起来更加方便,简单。
2.举例:一个简单的C/S架构程序:
程序清单:
socketserver端:my_socketserver_s.py
#!/usr/bin/env python
import socketserver
from time import ctime
HOST = 'localhost'
PORT = 2222
ADDRESS = (HOST, PORT)
class RequestTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
print('...connected from:', self.client_address)
try:
while True:
self.data = self.request.recv(1024)
print("send:".format(self.client_address), self.data, ctime())
if not self.data:
print("connection fail")
break
self.request.sendall(self.data)
except Exception as e:
print(self.client_address, "disconnection")
finally:
self.request.close()
def setup(self):
print("create connection:", self.client_address)
def finish(self):
print("finish!")
if __name__ == "__main__":
print('socket server main begin...')
server = socketserver.TCPServer(ADDRESS, RequestTCPHandler)
server.serve_forever()
RequestTCPHandler用于接受客户端发送过来的请求,并且进行处理。用request.sendall进行数据的发送。
创建一个TCPServer,其中,第一个参数是ip地址,第二个参数时RequestTCPHandler的实例。
客户端程序:my_socketserver_c.py
#!/usr/bin/env python
import socket
HOST = 'localhost'
PORT = 2222
ADDRESS = (HOST, PORT)
def connect(address):
print('socket client main begin...')
myClient = socket.socket()
myClient.connect(address)
while True:
cmd = input("(q退出)%").strip()
if len(cmd) == 0:
continue
if cmd == "q":
break
myClient.send(cmd.encode())
res = myClient.recv(1024)
print(res.decode())
myClient.close()
if __name__ == "__main__":
print('socket client main begin...')
connect(ADDRESS)
标准的socket客户端程序:
创建socket->建立连接->send->recv,
当输入q时,结束程序。
运行结果如下:
socketserver端运行结果:
socket server main begin...
create connection: ('127.0.0.1', 52653)
...connected from: ('127.0.0.1', 52653)
send: b'abc' Thu Sep 23 11:10:00 2021
send: b'12345' Thu Sep 23 11:10:02 2021
send: b'' Thu Sep 23 11:10:04 2021
connection fail
finish!
client端运行结果:
python mysocket_server_c.py
socket client main begin...
socket client main begin...
(q退出)%abc
abc
(q退出)%12345
12345
(q退出)%qProcess finished with exit code 0
server,client