使用线程运行TCP Server,可以获取client的连接,但无法进行数据交互

Viewed 102

参考官网提供的示例,及网上其它有关python多线程tcp socket通讯的示例,编写的代码如下:
import network
import socket
import _thread

def ConfigLocalIP(ip,mask,gate,dns,dhcpenb):
lan = network.LAN() #获取lan接口
if lan.active():
lan.active(0) #关闭网口
lan.active(1) #使能网口
if lan.config(mac="42:EA:D0:C2:0D:83") == False: #设置网口mac地址
return False
if lan.ifconfig((ip,mask,gate,dns)) == False: #设置网口 ip,掩码,网关,dns配置
return False
if dhcpenb == True:
if lan.ifconfig("dhcp") == False: #设置网口为dhcp模式
return False
print('net config: ' + str(lan.ifconfig()))
return True

def handle_client(client_sock,client_addr):
client_sock.write(f"Client address: {client_addr}")
while True:
recv_data = client_sock.read()
if recv_data != b"":
print("Receive from Tcpclient %s " % recv_data)
if "end" in recv_data:
print(f"Disconnect to Client {client_addr}")
client_sock.close()
break;

ConfigLocalIP(ip="192.168.1.10",mask="255.255.255.0",gate="192.168.1.1",dns="10.1.135.135",dhcpenb=False)
lan = network.LAN()
ip = lan.ifconfig()[0] #获取IP地址
ai = socket.getaddrinfo(ip, 8000)
addr = ai[0][-1] #提取地址和端口号
Server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
Server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #设置属性:允许地址重用
Server_socket.bind(addr) #绑定到端口
Server_socket.listen(5) #设置最大连接数,超过后排队
print("tcp server %s port: %d\n" % (ip, 8000))
while True:
client_sock,client_addr = Server_socket.accept()
client_sock.setblocking(False)
_thread.start_new_thread(handle_client,(client_sock,client_addr))

结果发现:在accept()获得client链接后,client的参数可以传入线程代码handle_client(client_sock,client_addr),但无法进行数据交互。会是什么原因?

可能需要加个sleep,让出cpu

1 Answers

你好,请用代码块来上传代码,现在这个格式乱掉了