Python3基础-socketserver实现并发

Python提供了两个基本的socket模块。一个是socket,它提供了标准的BSD Socket API;

另一个是socketServer就是对socket的再封装,它提供了服务器中心类,可以简化网络服务器的开发。

socketserver最主要的作用:就是实现一个并发处理

1、socketserver一共有这么几种类型:
1TCP 协议
class socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True)

2UDP 协议
class socketserver.UDPServer(server_address, RequestHandlerClass, bind_and_activate=True)

3、Unix 本机之间进程的TCPUDP (不常用)
class socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True)
class socketserver.UnixDatagramServer(server_address, RequestHandlerClass,bind_and_activate=True)

2、创建一个socketserver 至少分以下几步:
首先,您必须创建一个请求处理类,继承BaseRequestHandlerclass类并且重写父类的handle()方法,该方法将处理传入的请求。
其次,你必须实例化一个上面类型中的一个类(如TCPServer)传递服务器的地址和你上面创建的请求处理类 给这个TCPServer。
然后,调用handle_request()或者serve_forever()方法来处理一个或多个请求。
ser.handle_request() # 只处理一个请求,处理完就退出了
ser.serve_forever() # 处理多个请求,永远执行。
最后,调用server_close()关闭socket。

3、socketserver服务器端和客户端代码

server.py

import socketserver
ip_post = ('127.0.0.1',8898)

class Myserver(socketserver.BaseRequestHandler):
    def handle(self):
        print("conn is:",self.request) #conn   conn,addr = sock.accept()
        print("addr is:",self.request)  #addr  conn,addr = sock.accept()

        while True:
            try:
                data = self.request.recv(1024)  #收消息
                print('收到客户端的消息是',data)

                #发消息
                self.request.sendall(data.lower())
            except Exception as e:
                print(e)
                break

if __name__ == '__main__':
    s=socketserver.ThreadingTCPServer(ip_post,Myserver) #创建了一个线程的TCP服务器类,也就是通过多线程来进行应答客户端
    s.serve_forever()
    

client.py

from socket import *

ip_port = ('127.0.0.1', 8898)
buffer_size =1024

tcp_client = socket(AF_INET, SOCK_STREAM)
tcp_client.connect(ip_port)

while True:
    cmd = input('请输入字母>>>').strip()
    if not cmd: continue
    if cmd == 'quit': break
    tcp_client.send(cmd.encode('utf-8'))

    data =tcp_client.recv(buffer_size)

    print('收到服务端返回的结果', data.decode('utf-8'))

tcp_client.close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值