添加多线程handle_sock后,客户端和服务端交互只打印了一次
来源:4-8 基于tcp自定义第一个协议 - 模拟qq服务器和客户端 - 1

menghuanbaolei
2023-01-14
在 4-7 socket编程 - 客户端和服务端通信-2 最后加了多线程后,测试发现输出只打印了一次,用git仓库的源代码测试同样如此
代码如下:
# socket 服务端
import socket
import threading
server = socket.socket();
# 绑定到0.0.0.0:8000端口上
server.bind(('0.0.0.0', 6668))
server.listen()
def handle_sock(sock, addr):
while True:
# recv方法是阻塞的
tmp_data = sock.recv(1024)
print(tmp_data.decode("utf8"))
input_data = input()
sock.send(input_data.encode("utf8"))
# 获取客户端连接并启动线程去处理
while True:
# 阻塞等待连接
sock, addr = server.accept()
# 启动一个线程去处理新的用户连接
client_thread = threading.Thread(target=handle_sock, args=(sock, addr))
client_thread.start()
# data = ""
# sock.send("welcome to server!".encode("utf8"))
# print(data);
# sock.close();
#socket客户端
import socket
client = socket.socket()
client.connect(('127.0.0.1', 6668))
# server_data = client.recv(1024)
# print("server response: {}".format(server_data.decode("utf8")))
while True:
input_data = input()
# 如果#结尾,就代码提交完成
client.send(input_data.encode("utf8"))
server_data = client.recv(1024)
print("server response: {}".format(server_data.decode("utf8")))
# client.close();
写回答
1回答
-
bobby
2023-01-16
代码没问题啊,我这是拷贝你上面的代码运行的,
效果没问题啊
032023-01-19
相似问题