如何在套接字编程中不按Enter即可接收消息

时间:2019-06-11 08:02:07

标签: python python-3.x sockets python-3.7

我是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()) 

1 个答案:

答案 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()