Socketserver
Socketserver:
基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环
socketserver模块中分两大类:server类(解决链接问题)和 request类(解决通信问题)
基于tcp 的socketserver我们自己定义的类中的 self.server即套接字对象 self.request即一个链接 self.client_address即客户端地址 基于udp 的socketserver我们自己定义的类中的 self.request是一个元组(第一个元素是客户端发来的数据,第二部分是服务端的udp套接字对象),如(b'adsf', <socket.socket fd=200, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>) self.client_address即客户端地址
线程实现:

进程实现:


socketserver —— 实现ftp server端和client端的交互
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
conn = self.request
conn.sendall(bytes('欢迎致电 10086,请输入1xxx,0转人工服务.',encoding='utf-8'))
Flag = True
while Flag:
data = conn.recv(1024).decode('utf-8')
if data == 'exit':
Flag = False
elif data == '0':
conn.sendall(bytes('通过可能会被录音.balabala一大推',encoding='utf-8'))
else:
conn.sendall(bytes('请重新输入.',encoding='utf-8'))
if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1',8008),MyServer)
server.serve_forever()
import socket
ip_port = ('127.0.0.1',8008)
sk = socket.socket()
sk.connect(ip_port)
sk.settimeout(5)
while True:
data = sk.recv(1024).decode('utf-8')
print('receive:',data)
inp = input('please input:')
sk.sendall(bytes(inp,encoding='utf-8'))
if inp == 'exit':
break
sk.close()
读书使人心眼明亮


浙公网安备 33010602011771号