zoukankan      html  css  js  c++  java
  • Socket编程,SocketServer模块

    一、SocketServer的几种类型
    面向远程: TCP 协议链接:socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True). UDP 协议链接:socketserver.UDPServer(server_address, RequestHandlerClass, bind_and_activate=True).

    本地服务:
    UnixStream:socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True)
    UnixDatagram:socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True)

    二、几种服务器的继承关系
    +------------+
    | BaseServer |
    +------------+
          |
          v
    +-----------+        +------------------+
    | TCPServer |------->| UnixStreamServer |
    +-----------+        +------------------+
          |
          v
    +-----------+        +--------------------+
    | UDPServer |------->| UnixDatagramServer |
    +-----------+        +--------------------+
    
    
    1.2 如何创建一个SocketServer 以Tcp为列

    First:
    创建一个请求处理类PersonalTcpHandle ,继承 BaseRequestHandler, 并且还有重写父类的handle()方法

    Second:
    必须实例化 TCPServer, 并传送服务端的 IP 、Port 和上面创建的请求处理类给这个TCPServer( (host, port), PersonalTcpHandle)

    Thrid:
    接着使用 server.handle_request() --->只执行一个请求
    server.serve_forever() --->永远的执行下去,执行很多请求

    二、’代码实现
    import socketserver
    
    class PersonalTcpHandle(socketserver.BaseRequestHandler):       #继承父类请求处理类
        
        """ 每来一个请求都会实例化一次这个类"""
        
        def handle(self):  #重写handle 方法,客户端来的所有请求都在这被处理响应
            """该类接受客户端发送的数据,并在处理后返回"""
            self.data = self.request.recv(1024).strip()    #这儿的 self.request  就是socket里面的  sock  ,addr = server.accept()  里面的 sock 
            """ Do someing with self.data and then return the result to client"""
            self.request.sendall('处理后的数据')    #注意必须为bytes 类型
    
    if __name__ == "__main__":
        host, port = "localhost", 3309
    
        server = socketserver.TCPServer((host, port), PersonalTcpHandle)   #单线程
        # server = socketserver.ThreadignTCPServer((host,port), PersonalTcpHandle)  #多线程服务器, 建议使用
        server.serve_forver(poll_interval= 1)  #poll_interval 参数为每多少时间检查一次连接是否断开
    

    这样就完成了一个多线程的TCPserver服务

  • 相关阅读:
    随机森林算法参数调优
    BAYES和朴素BAYES
    阿里云 金融接口 token PHP
    PHP mysql 按时间分组 表格table 跨度 rowspan
    MySql按周,按月,按日分组统计数据
    PHP 获取今日、昨日、本周、上周、本月的等等常用的起始时间戳和结束时间戳的时间处理类
    thinkphp5 tp5 会话控制 session 登录 退出 检查检验登录 判断是否应该跳转到上次url
    微信 模板消息
    php 腾讯 地图 api 计算 坐标 两点 距离 微信 网页 WebService API
    php添加http头禁止浏览器缓存
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9535609.html
Copyright © 2011-2022 走看看