Python套接字 - 同时发送/接收消息

7

基本上,我一直在使用socket和线程开发一个简单的聊天室。在我的客户端中,我可以接收和发送消息,但是我的问题是,在循环中,一个消息会在另一个消息之前到达,因此如果我正在发送消息,只有在我发送消息后才能接收数据。我希望它像其他聊天室一样工作,即我可以在发送消息时接收消息。任何帮助都将非常有帮助。这是我的基本客户端:

import socket
import sys

###########
HOST = '25.0.18.52'
PORT = 9999
###########

name = input("Enter your name: ")
s = socket.socket()
s.connect((HOST,PORT))

while 1:
    message = input("Message: ")
    s.send("{}: {}".format(name, message).encode('utf-8'))
    data = s.recv(1024)
    a = data.decode("utf-8") 
    print(a)
1个回答

5

您应该保留2个线程:一个用于监听,另一个用于接收。在您的while循环中,应删除监听器部分,并将代码保留在不同的线程中。这样,您就可以同时接收和在控制台上输入。

def recv():
    while True:
         data = s.recv(1024).decode()
         if not data: sys.exit(0)
         print data

Thread(target=recv).start()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接