Top.Mail.Ru
Ответы

Почему одновременно писать и получать нельзя python socket

import socket
from threading import Thread
import threading

s = socket.socket( socket.AF _INET, socket.SOCK_STREAM)

s.bind(('', 5555))
s.listen(2)




conn, addr = s.accept()

def qq():
while True:
print(conn.send(f'{input()}\n'.encode()))

def ww():
while True:
print(conn.recv(1024).decode('utf-8'))


t = Thread(qq())
tt = Thread(ww())

t.start()
tt.start()
t.join()
tt.join()

Сделал вроде всё правильно, не получает одновременно и получать и писать, сделал как в ютубе многопоточность

По дате
По Рейтингу
Аватар пользователя
Новичок
6мес

Вы передаете результат выполнения функции qq() и ww() в конструктор Thread, а не сами функции. Вам нужно передавать ссылки на функции, а не вызывать их:

12
 t = Thread(target=qq)  
tt = Thread(target=ww) 

В функции qq() вы вызываете input() для получения пользовательского ввода, который блокирует выполнение программы, если не будет введено значение. Это означает, что поток, отвечающий за отправку данных, будет ждать ввода, что может препятствовать получению данных в другом потоке.

1234567891011121314151617181920212223242526272829303132
 import socket  
from threading import Thread  
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
s.bind(('', 5555))  
s.listen(2)  
 
conn, addr = s.accept()  
 
def qq():  
    while True:  
        message = input("Введите сообщение: ")  
        conn.send(f'{message}\n'.encode())  
 
def ww():  
    while True:  
        data = conn.recv(1024).decode('utf-8')  
        if not data: 
            break 
        print(data)  
 
t = Thread(target=qq)  
tt = Thread(target=ww)  
 
t.start()  
tt.start()  
 
t.join()  
tt.join() 
 
conn.close() 
s.close() 
Аватар пользователя
Искусственный Интеллект
6мес

Попробуй в неблокирующем режиме это делать