zoukankan      html  css  js  c++  java
  • Python—网络通信编程之tcp非阻塞通信(socketserver)

    服务端代码

    import socketserver
    
    # 定义一个类
    class MyServer(socketserver.BaseRequestHandler):
        # 如果handle方法出现报错,则会进行跳过.但是setup方法和finish方法无论如何都会进行执行的.
        def setup(self):
            print("首先执行setup")	
        
        def handle(self):
            print("然后执行handle")	
            conn = self.request                         # 定义连接变量
            conn.send(("连接成功,客户端端口:%s" % (conn.getpeername()[1])).encode())   # 向客户端发送消息
            while True:
                data = conn.recv(1024)                  # 接收客户端消息
                print(data.decode())
                if not data or data == b'exit':
                    break
                conn.send(data)
            conn.close()
        		
        def finish(self):
            print("最后执行finish")	
        
    if __name__ == "__main__":
    	# 创建多线程实例
    	server = socketserver.ThreadingTCPServer(("127.0.0.1", 3120) ,MyServer)
    	# 开启异步多线程,等待连接
    	server.serve_forever()

    客户端代码

    import socket
    
    client = socket.socket()
    client.connect(("127.0.0.1", 3120))
     
    while True:     
        data = client.recv(1024)  
        print(data.decode())     
        msg = input("请输入要发送的信息...")
        client.send(msg.encode())
        if not msg or msg == "exit":
            break
         
    client.close()
    

    为什么是非阻塞通信呢?

    原来的tcp通信只能跟一个客户端连接,当另一个客户端来连接的时候,就会阻塞连接不上。socketserver模块采用的就是多线程。

  • 相关阅读:
    dtoi2680「SDOI2016」生成魔咒
    dtoi2679「SDOI2016」游戏
    dtoi2678「SDOI2016」数字配对
    dtoi2677「SDOI2016」储能表
    dtoi4545「HNOI2016」树
    dtoi4543「HNOI2016」最小公倍数
    dtoi4544「HNOI2016」网络
    dtoi4548「HNOI2016」大数
    ts定义数组对象
    RN项目ios本地模拟机无法加载本地图片的解决方案
  • 原文地址:https://www.cnblogs.com/liuhaidon/p/12315690.html
Copyright © 2011-2022 走看看