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