• (4)socket的基础使用(基于TCP协议的并发编程)


    需要实现并发需要依靠socketserver 模块

    socketserver模块下有几个功能

    def __init__(self, request, client_address, server):
    self.request = request
    self.client_address = client_address
    self.server = server
    self.setup()
    try:
    self.handle()
    finally:
    self.finish()

    def setup(self):
    pass

    def handle(self): #要实现并发就要调用这个功能
    pass

    def finish(self):
    pass

    TCP协议实现并发编程步骤详解(客户端不需要改动,改动的就是服务端

    import socketserver #需要导入socketserver模块

    class MyHander(socketserver.BaseRequestHandler):#这个类就是要继承socketserver模块下的BaseRequestHandler功能,这是规定的
    def handle(self):
    '''这个request 就相当于我们自己写服务端的时候conn这个变量<socket.socket fd=248, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 50687)>里面包含了协议类型,服务端的地址和端口,客户端的地址和端口'''
    data = self.request.recv(1024) #request就是请求

    self.request.send(data.upper()) 给客户端发送结果
    PS:self.下面有几个功能,可以查看客户端发送来的地址,请求等信息,client_address就是客户端发送来的地址,request就是发送来的请求

    if __name__ == '__main__':
    '''ThreadingTCPServer就是多开一个线程来服务客户端,ThreadingTCPServer底层已经封装了相当于我们自己写的基于服务端的代码,而且还自动开了多进程和多线程,所以用这个模块就不用再自己写服务端'''
    s = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyHander,bind_and_activate=True)
    s.serve_forever() #实例化后需要sever_forver来实现永久监听,就是永远启动这个服务
    '''需要传入三个参数'''
    1:server_address就是要启动这个多线程服务需要知道监听的端口和地址#
    2:RequestHandlerClass 这个就是一个类,就是我们自己要写一个类,这个类就是处理客户端请求的
    3:bind_and_activate 这个参数就相当于服务端里面的bind和listen

    PS:当一个请求发送过来后,会把请求交给MyHander这个类,会自动进行一个实例化,默认调用类下的handle方法
  • 相关阅读:
    mysql数据库连接报错ERRoR1130(HY000)
    Ladap相关知识精简资料
    Github访问慢,解决方案
    IIS短文件漏洞成因,及修复方案
    Kali linux简单匿名处理方法
    NHibernate实践总结(二) 在mapping文件中设置抓取策略对HQL与Criteria造成不同影响的测试与验证
    NHibernate 3.x新功能实践(二) QueryOver(下)
    NHibernate实践总结(三)HQL的thetastyle join对无关联实体的连接与应用
    NHibernate实践总结(一)
    Scott Hanselman's 2009 NET与Windows终极开发工具列表
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10188756.html
Copyright © 2020-2023  润新知