Не могу решить проблему с input?

проблема следующая - мне нужно, чтобы функция recv печатала полученное сообщение, пока sender ожидает input()
5e48487fbad49585529747.png
import socket
import threading
import json

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

with open('config.json', 'r') as file:
    config = json.load(file)

for address in config['config']:
    try:

        sock.connect((address['address'][0], int(address['address'][1])))


    except ConnectionRefusedError:
        print('[LOG] - Ошибка подключения: проверьте подключение к интернету!')

    else:
        print('[LOG] - Вы успешно подключены!')

        nickname = str(input('Ваш логин: '))

def recv():
    while True:
        data = sock.recv(1024)
        if data:
            print('\n' + data.decode('utf-8'))


def sender():
    while True:
        message = input('{}'.format(nickname) + ': ')
        string = nickname + ': ' + message
        sock.send(string.encode('utf-8'))


thread_rec = threading.Thread(target=recv)
thread_sender = threading.Thread(target=sender)

thread_rec.start()
thread_sender.start()
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
@Surv16893 Автор вопроса
Решил вопрос так:

Для решения нужны библиотеки:
import asyncio

from prompt_toolkit import PromptSession
from prompt_toolkit.patch_stdout import patch_stdout

def recv():
    while True:
        data = sock.recv(1024)
        if data:
            print('\n' + data.decode('utf-8'))

async def sender():
    session = PromptSession()
    while True:
        try:
            with patch_stdout():
                message = await session.prompt_async('{}'.format(nickname) + ': ')
            string = nickname + ': ' + message
            sock.send(string.encode('utf-8'))
        except socket.error:
            pass

thread_reciev = threading.Thread(target=recv, name="reciev_message")
thread_reciev.start()

asyncio.get_event_loop().run_until_complete(sender())
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Нужно, чтобы строка была такого формата: nickname отправителя + сообщение отправителя, но при отправке сообщения, у второго пользователя, после получения сообщения появляется чистая строка ввода, как это решить?


перепиши плиз для тупых
1) консоль Sender - строка вводится так
2) консоль ресивер - строка получается так, и вот так, а надо так

но при отправке сообщения
и это впаяй что там при отправке происходит, а что при получении, а что у других не происходит и у тебя не должно происходить
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 18:39
30000 руб./за проект
25 нояб. 2024, в 18:35
30000 руб./за проект
25 нояб. 2024, в 18:33
10000 руб./за проект