Как отправлять сообщения не дожидаясь получения сообщения от другого клиента?
В первый раз сталкиваюсь с socket в Python. Пишу простой P2P чатик, но не могу отправлять в нём сообщения после первого раза отправки(когда пользователь подключается к серверу, то отправляет один раз сообщение, а дальше начинает бесконечно ожидать получение сообщение от другого клиента), пытался разобраться с async, но что-то недопонял и не смог реализовать асинхронность Код:
import socket
import sys
import asyncio
import time
#Импорт библиотек
async def send_msg(s):
while True:
print('Please, write a message')
msg = input().encode('UTF-8')
if msg: #если на вход поступило сообщение, то кодируем его и отправляем
msg_header = f"{len(msg):<{HEADER_LENGTH}}".encode('UTF-8')
s.send(msg_header+msg)
print(msg_header, msg)
async def recv_msg(s):
while True:
try: #Если нам поступает сообщение, содержащее заголовок, то принимаем его, показываем само сообщение и username того, кто отправил
user_header =s.recv(HEADER_LENGTH)
if not len(user_header):
sys.exit()
user_lenght = int(user_header.decode('UTF-8').strip())
username = s.recv(user_lenght)
msg_header = s.recv(HEADER_LENGTH)
msg_length = int(msg_header.decode('UTF-8').strip())
data = s.recv(msg_length).decode('UTF-8')
print(f"New message from {username.decode('UTF-8')} - {data}")
except IOError as _ex:
pass
#HEADER - const значение, ЗАГОЛОВОК
HEADER_LENGTH = 10
HOST_IP = input('Please, type IP of server')
HOST = HOST_IP,10000
async def main():
username = input("Please type a username: ").encode('UTF-8')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(HOST)
s.setblocking(False)
header = f"{len(username):<{HEADER_LENGTH}}".encode('UTF-8')
s.send(header + username)