2020-08-24 2020-08-24 netcat有一个特点就是收发是不阻塞的。 使用nc -l 12345和nc localhost 12345 进行测试,可以看到实时的收发信息: 然而在python中socket在recv()的时候会进行阻塞,如果客户端和服务端都在等待接收会造成死锁,故特此编写了个简单的例子实现python socket编程同时收发。(当然也可以模仿netcat异步非阻塞编程,但要用到select) 服务端 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import socket from threading import Thread sock = socket.socket() sock.bind(('127.0.0.1', 10235)) sock.listen(1) conn, addr = sock.accept() print('connected:', addr) def recv(): while True: data = conn.recv(1024).decode() if not data: break print("Received:"+data) def send(): while True: conn.send(input().encode()) Thread(target=recv).start() Thread(target=send).start() 客户端 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import socket from threading import Thread sock = socket.socket() sock.connect(('127.0.0.1', 10235)) def recv(): while True: data = sock.recv(1024).decode() if not data: break print("Received:"+data) def send(): while True: sock.send(input().encode()) Thread(target=recv).start() Thread(target=send).start() 现在python也能实时收发了 前一篇 使用python写c语言逆向程序的一些坑 后一篇 macos python2 pwntools时出现有关unicorn问题的汇总
说些什么吧!