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服务

  • 相关阅读:
    数据库课程设计
    VB.NET 数组的定义 动态使用 多维数组
    Hadoop学习之配置Eclipse远程调试Hadoop
    2014阿里巴巴研发project师暑期实习生面试经验
    SD卡中FAT32文件格式高速入门(图文具体介绍)
    Java抓取网页数据(原网页+Javascript返回数据)
    WPF中的CheckBox的_ (underscore / 下划线)丢失
    初识EPC
    SharePoint 2013 中代码创建列表查阅项字段
    代码编写逻辑(先伪代码,再带方法的逻辑,最后实现具体方法)(先控制器,再模型)
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9535609.html
Copyright © 2011-2022 走看看