添加多线程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

代码没问题啊,我这是拷贝你上面的代码运行的, //img.mukewang.com/szimg/63c51f2b0972f86903990228.jpg 效果没问题啊 //img.mukewang.com/szimg/63c51f3f095e469e03520235.jpg

0
3
menghuanbaolei
回复
bobby
好的~
2023-01-19
共3条回复

Python爬虫工程师实战 大数据时代必备

慕课网严选精品教程,高质量内容+服务!

2377 学习 · 1158 问题

查看课程