我是Python套接字编程的新手,正在尝试编写一个聊天室应用程序,但是我有一个问题,那就是每个客户端都应按Enter键才能接收来自其他客户端的消息。
#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())
答案 0 :(得分:0)
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()