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()
读书使人心眼明亮
原文地址:https://www.cnblogs.com/big-handsome-guy/p/7644304.html