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

Sat*_*yrs 4 python sockets send recv

基本上,我一直在使用套接字和线程在一个简单的聊天室中工作。在我的客户端中,我可以接收和发送消息,我的问题是一个循环出现在另一个循环之前,因此,如果我要发送一条消息,则仅在发送一条消息后才可以接收数据。我希望它像其他任何聊天室一样工作,在我发送消息时可以在其中接收消息,任何帮助都会有很大帮助。这是我的基本客户:

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)
Run Code Online (Sandbox Code Playgroud)

Sug*_*gam 5

您应该保留2个线程。一个用于收听,另一个用于接收。在while循环中,应删除侦听器部分,并将代码保留在其他线程中。这样,您将收到并在控制台上以相同类型键入内容。

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

Thread(target=recv).start()
Run Code Online (Sandbox Code Playgroud)