zoukankan      html  css  js  c++  java
  • socketserver实现并发

    我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信。它是在socket的基础上进行了一层封装,也就是说底层还是调用的socket,在py2.7里面叫做SocketServer也就是大写了两个S,在py3里面就小写了。后面我们要写的FTP作业,需要用它来实现并发,也就是同时可以和多个客户端进行通信,多个人可以同时进行上传下载等。

     
      那么我们先看socketserver怎么用呢,然后在分析,先看下面的代码
    复制代码
    import socketserver  # 引入模块
    
    class MyServer(socketserver.BaseRequestHandler):   # 类名随便定义,但是必须继承socketserver.BaseRequestHandler此类
        
        def handle(self):  # 写一个handle方法,固定名字
            while 1:
                # self.request 相当于conn管道
                from_client_data = self.request.recv(1024).decode('utf-8')
                print(from_client_data)
                to_client_data = input('服务端回信息:').strip()
                self.request.send(to_client_data)
                
    
    
    if __name__ == '__main__':
        ip_port = ('127.0.0.1',8080)
        socketserver.TCPServer.allow_reuse_address = True  # 允许端口重用
        server = socketserver.ThreadingTCPServer(ip_port,MyServer)
        # 对 socketserver.ThreadingTCPServer 类实例化对象,将ip地址,端口号以及自己定义的类名传入,并返回一个对象
        server.serve_forever() # 对象执行serve_forever方法,开启服务端
    import socket
    client = socket.socket()
    client.connect(('127.0.0.1',8888))
    
    while 1:
        to_server_data = input('>>>').strip().encode('utf-8')
        client.send(to_server_data)
        from_server_data = client.recv(1024).decode('utf-8')
        print(from_server_data)
  • 相关阅读:
    Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round)
    Codeforces Round #708 (Div. 2)
    Educational Codeforces Round 106 (Rated for Div. 2)
    ccf csp 202012-1
    带配额的文件系统 (带模拟)
    阔力梯的树
    Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)
    如何获取某个网站IP地址?
    C++开发者眼中的Java关键字abstract
    Java代码中如何获文件名和行号等源码信息?
  • 原文地址:https://www.cnblogs.com/YZL2333/p/10429451.html
Copyright © 2011-2022 走看看