python中的socketserver模块与多线程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41656968/article/details/80356816

    早就听说socketsever特别厉害,可以简化客户端和服务端的实现,尤其是在多线程socket通话的情境下,可以说是一个比较高级的模块


python下的socket编程我们已经学过了,而今天,我们来使用socketsever这个模块,写一个TCP的多线程socket


服务端:
import socketserver

class Server(socketserver.BaseRequestHandler):        # 使用socketserver模块 ,必先定义一个继承自BaseRequestHandler类
    def handle(self):
        print('New connection:',self.client_address)
        try:
            while True:
                buf = self.request.recv(1024)
                if not buf:
                    break
                print('Client data:',buf.decode())
                self.request.send(buf)            # 收到消息重发客户端
        except ConnectionResetError:              # 捕捉客户端关闭信息 
            print('One connection closed')

if __name__ == '__main__':
    HOST = 'localhost'  
    PORT = 8001 
    server = socketserver.ThreadingTCPServer((HOST,PORT),Server)     # 实现多线程通话
    server.serve_forever()          # 持续运行


客户端:

import socket

HOST = 'localhost'  
PORT = 8001
sock = socket.socket()
sock.connect((HOST, PORT))

while True:
    message = input('Please input:')
    sock.send(bytes(message, 'utf8'))
    recv = sock.recv(1024)
    print(str(recv, 'utf8'))
sock.close()


运行截图:

客户端运行:



服务端运行:



当有多个客户端连接时,服务端就会打印其客户端地址,并开始接收其消息



阅读更多

扫码向博主提问

姜亚轲

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • python
  • 树莓派
  • c
  • linux
  • qt
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页