socket编程中如何不按回车接收消息

How to receive messages without pressing enter in socket programming

我是 Python 的套接字编程新手,我正在尝试编写一个聊天室应用程序,但我遇到了一个问题,即每个客户端都应该按回车键才能接收来自其他客户端的消息.

#my client side code
import socket 
import sys

client_sock = socket.socket() 
port = int(sys.argv[1])
client_sock.connect(('127.0.0.1', port))
print("Connected to server. start sending messages") 
while True:
    sending_message = input('> ')
    if sending_message:
        client_sock.send(sending_message.encode())
    receiving_message = client_sock.recv(1024)
    if  receiving_message:
        print(receiving_message.decode()) 

input 暂停您的程序。因此,要么不能盲目使用input,要么必须使用线程。使用线程比替代方法更容易(使用 select 来确定下一步该做什么)。输入和发送一个线程,接收和打印一个线程。

下面是对代码的简单重写:

import threading
import socket 
import sys

client_sock = socket.socket() 
port = int(sys.argv[1])
client_sock.connect(('127.0.0.1', port))
print("Connected to server. start sending messages")

def sender():
    while True:
        sending_message = input('> ')
        if sending_message:
            client_sock.send(sending_message.encode())

def receiver():
    while True:
        receiving_message = client_sock.recv(1024)
        if  receiving_message:
            print(receiving_message.decode()) 

sender_thread = threading.Thread(target=sender)
receiver_thread = threading.Thread(target=receiver)

sender_thread.start()
receiver_thread.start()

sender_thread.join()
receiver_thread.join()