• python之 socketserver模块的使用


    在我们正常的使用socket模块来写一个server的程序就会显得比较的复杂通常一般流程为

      1.生成socket实例对象

      2.绑定地址

      3.开始监听

      4.接收数据

    一般demo为

    # 服务器
    
    import socket
    server = socket.socket()  # 声明socket类型,同时生成socket连接对象
    server.bind(('localhost', 6969))   # 绑定要监听的端口此时绑定的是本地
    server.listen()  # 监听  括号里面的就是最大允许链接
    print('等待电话打进来')
    coon, addr = server.accept()  # 等待    (此时上面加一个while 就可以多个电话打进来并且进行通话)
    # coon 就是客户端连过来而在服务器端为其生成的一个连接实例
    # addr 就是地址
    print('电话打进来了')
    print(coon, addr)  # 将coon 与addr 显示出来
    while True:  # 此时就可以一直不停的发送数据了, 此时的效果就是一个电话可以无阻碍的通话
        # 如果此时没有true的话就只能接收一次了
        data = coon.recv(1024)  # 接收数据
        print('recv:', data.decode())   # 此时注意我们需要吧接收的数据解码,因为发过来的是byte类型
        coon.send(data.upper())  # 将数据里面的字母转化为大写发送
        server.close()

    这就是一个单个接入,多次接收的server 

    如果想用多个接入多个接收的话我们只需要在coon上加一个while即可 ,对与server来说一个coon就是哟个接入点

    那么我们的socketserver又是方便在何处呢

    对于socketserver来说我们只需要修改头节点就可以了

    我们需要新建立一个类在类里面修改 socketserver . BaseRequestHandler即可

    在这个类中hand结束即代表 当前连接断开 

    import socketserver
    
    
    class My_TCPhandler(socketserver.BaseRequestHandler):
        def handle(self):
            while True:
                try:
                    self.data = self.request.recv(1024)
                    print("{} wrote:".format(self.client_address[0]))
                    print(self.data)
                    self.request.send(self.data.upper())  # 服务器端到此结束
                except ConnectionResetError as e:
                    print(e)
                    break
    
    
    HOST, POST = "localhost", 9999
    server = socketserver.ThreadingTCPServer((HOST, POST), My_TCPhandler)
    # 并发 TCPServer改成 ThreadingTCPServer 在Linux是建议使用Forking来开多线程
    server.serve_forever()

    server = socketserver.ThreadingTCPServer((HOST, POST), My_TCPhandler) 时就是开了多线程可以多个接入,多个实时接收与发送
    这样来看我们的的服务器端的程序是不是便捷了呢?
  • 相关阅读:
    Setting up SharePoint Blogs, Wikis, and Announcements
    Reports 将透视表显示成没有级联关系的普通表
    TF80012: The document cannot be opened because there is a problem with the installation of the Microsoft Visual Studio v
    项目干系人分析的“四步法”
    Overload和Override的区别
    Add and Customize a Type of Work Item
    将所有的非DLL, PDB文件从一个位置Copy到另外一个位置,相同文件跳过
    如何删除工作项
    No Excel Calculation Services is available in the farm
    SPORTINGLIFE.COM
  • 原文地址:https://www.cnblogs.com/BookMiki/p/10192311.html
Copyright © 2020-2023  润新知