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