Код: Выделить всё
import asyncio
import json
import time
reader = None
writer = None
ip = '127.0.0.1'
port = 8889
async def handle_input():
while True:
user_input = input("[You]: ")
await send_message(user_input)
async def send_message(message):
if not reader or not writer:
print("[Error]: Not connected to the message server.")
return
try:
message_data = {
"sender": "name",
"message": message
}
request_data = json.dumps(message_data)
writer.write(request_data.encode('utf-8'))
await writer.drain()
print(f"[Info]: Message sent: {message}")
except Exception as e:
print(f"[Error]: Failed to send message. Error: {e}")
async def message_test():
global reader, writer
try:
reader, writer = await asyncio.open_connection(ip, port)
print(f"[Info]: Connected to the conference message server")
await handle_input()
except Exception as e:
print(f"[Error]: Failed to start the conference client. Error: {e}")
if __name__ == "__main__":
asyncio.run(message_test())
Код: Выделить всё
import asyncio
import json
clients = []
async def handle_client(reader, writer):
addr = writer.get_extra_info('peername')
print(f"[Info]: New connection from {addr}")
clients.append((reader, writer))
try:
while True:
data = await reader.read(100)
if not data:
break
message = data.decode('utf-8')
print(f"[Info]: Received message: {message}")
except asyncio.CancelledError:
pass
finally:
clients.remove((reader, writer))
print(f"[Info]: Connection closed by {addr}")
writer.close()
await writer.wait_closed()
async def start_server():
server = await asyncio.start_server(
handle_client, '127.0.0.1', 8889
)
addr = server.sockets[0].getsockname()
print(f"[Info]: Server started on {addr}")
async with server:
await server.serve_forever()
if __name__ == "__main__":
asyncio.run(start_server())
Когда программа запускается, клиент получает пользовательское сообщение из входных данных и отправляет его на сервер. При первом входе в цикл while сервер успешно получает сообщение. Во второй раз и следующие несколько раз клиент может напечатать «[Информация]: Сообщение отправлено: {сообщение}», но сервер не получил сообщение. сообщение.
Интересно, почему это происходит
Я пытался изменить цикл while на
Код: Выделить всё
user_input = input("[You]: ")
await send_message(user_input)
user_input = input("[You]: ")
await send_message(user_input)
Подробнее здесь: https://stackoverflow.com/questions/792 ... and-client
Мобильная версия