SocketServer-实现并发处理3

本文介绍如何使用Python的socketserver模块创建一个简单的TCP服务端。通过继承BaseRequestHandler类并重写handle()方法来处理客户端请求。服务端接收客户端消息并以大写形式返回。同时提供了客户端代码用于测试。

用socketserver创建一个服务的步骤:

1  创建一个request handler class(请求处理类),合理选择StreamRequestHandler和DatagramRequestHandler之中的一个作为父类(当然,使用BaseRequestHandler作为父类也可),并重写它的handle()方法。

2  实例化一个server class(服务类)对象,并将服务的地址和之前创建的request handler class传递给它。

3  调用server class对象的handle_request() 或 serve_forever()方法来开始处理请求。

服务器端代码:

 

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler): #自己写的请求处理类,每个客户端的请求过来,都会实例它。MyTCPHandler

    def handle(self): #重写请求处理类的handle(),跟客户端所有的交互都是在handle里完成的。
        while True:
            try:
                self.data = self.request.recv(1024).strip()
                print("{} wrote:".format(self.client_address[0])) #打印客户端的IP地址
                print(self.data)

                self.request.sendall(self.data.upper()) #变成大写,传回给客户端。
            except ConnectionResetError as e:
                print('Error is: ',e) #客户端断开时抛出的异常
                break

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) #实例化一个server class(服务类)对象,并将服务的地址和之前创建的request handler class传递给它
    server.serve_forever() #调用server class对象的serve_forever()方法来开始处理请求。处理多个请求。

 

 客户端代码:

import socket
client=socket.socket()
client.connect(('localhost',9999))
while True:
    msg=input(">>:").strip()
    if len(msg)==0:continue
    client.send(msg.encode('utf-8'))
    data=client.recv(1024)
    print("recv:",data.decode())
client.close()

 

转载于:https://www.cnblogs.com/momo8238/p/7326376.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值