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模块采用的就是多线程。

  • 相关阅读:
    YYModel Summary
    Custom-->TableView_Swizzle
    创建UIBarButtonItem的分类
    为家庭版系统添加组策略
    JSDOM
    JavaScript
    python基础三元表达式和内置函数列表
    二.ubuntu14.04 3D特效设置
    一.ubuntu14.04安装、亮度设置、显卡设置等一体化讲解
    oracle12c及PLSQL Developer安装全程记录
  • 原文地址:https://www.cnblogs.com/liuhaidon/p/12315690.html
Copyright © 2011-2022 走看看