zoukankan      html  css  js  c++  java
  • (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方法
  • 相关阅读:
    ajax
    ASP.net(c#)返回上一页效果(后退)代码
    审批时进行判断
    indexOf(String.indexOf 方法)判断标签是否存在
    不用代码隐藏自定义列表
    列表显示隐藏
    jq加载页面跳转指定的页面
    sharepoint2013部件保存后停留在保存页面
    Perl学习之四:语句(续)
    Perl学习之四:语句
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10188756.html
Copyright © 2011-2022 走看看