我有一个client.py和一个server.py.客户端从服务器接收偶尔的消息。客户端也可以向服务器发送消息。
因为raw_input似乎阻止主线程,当客户端从服务器收到消息时,它无法打印到控制台,并且需要raw_input首先完成。
我尝试使用多线程来解决这个问题,但是在下面的代码中,raw_input甚至没有被调用。以下是client.py
import socket
import sys
import threading
BUFFER_SIZE = 1024
def listen_for_server_response(s):
while 1:
data = s.recv(BUFFER_SIZE)
print(data)
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], int(sys.argv[2])))
thread = threading.Thread(target = listen_for_server_response(s))
thread.start()
while 1:
command = raw_input("Command: ")
s.send(command)
if __name__ == "__main__":
main()
非常感谢任何帮助!
答案 0 :(得分:2)
这似乎是糟糕的设计,但你需要使用可调用函数调用线程
thread = threading.Thread(target = listen_for_server_response,args=(s,))
thread.start()
通过调用它就像你在示例中所做的那样,在线程启动之前调用它并且只是永远循环...你甚至不能将它设置为thread.start