分享

Python

 文炳春秋 2020-04-02

服务端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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()

客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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模块采用的就是多线程。

https://www.cnblogs.com/liuhaidon/p/12315690.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约