zoukankan      html  css  js  c++  java
  • 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) 时就是开了多线程可以多个接入,多个实时接收与发送
    这样来看我们的的服务器端的程序是不是便捷了呢?
  • 相关阅读:
    Linux利器strace
    记一次MongoDB性能问题
    mongodb慢查询记录
    PHP操作MongoDB学习笔记
    字典NSDictionary的常见用法
    字典与自定义对象的相互转换
    URLString中文字符转义
    常见序列化与反序列化方法
    Swift处理异常的三种方式-try
    客户端Socket使用步骤
  • 原文地址:https://www.cnblogs.com/BookMiki/p/10192311.html
Copyright © 2011-2022 走看看