Я сделал лучше чат клиента следующую помощь от людей:Мой чат-клиент зависает после начала резьбы
Они сказали мне, что если я не хочу быть заблокирован на .recv при ожидании сообщений, я должен был бы для использования потоков, классов, функций и очередей для этого.
Итак, я последовал за помощью, чтобы конкретный человек дал мне, где я создал поток из класса, а затем определил функцию, которая должна была читать входящие сообщения и печатать их.
Я также создал функцию, которая позволяет вводить вещи, которые нужно отправить.
Вещь, когда я запускаю программу. Ничего не произошло.
Может ли кто-нибудь помочь указать, что не так? (Я задавал вопросы и исследовал в течение 3-х дней, без получения в любом месте, так что я пробовал)
from socket import *
import threading
import json
import select
print("Client Version 3")
HOST = input("Connect to: ")
PORT = int(input("On port: "))
# Create Socket
s = socket(AF_INET,SOCK_STREAM)
s.connect((HOST,PORT))
print("Connected to: ",HOST,)
#-------------------Need 2 threads for handling incoming and outgoing messages--
# 1: Create out_buffer:
Buffer = []
rlist,wlist,xlist = select.select([s],Buffer,[])
class Incoming(threading.Thread):
# made a function a thread
def Incoming_messages():
while True:
for i in rlist:
data = i.recv(1024)
if data:
print(data.decode())
# Now for outgoing data.
def Outgoing():
while True:
user_input=("Your message: ")
if user_input is True:
Buffer += [user_input.encode()]
for i in wlist:
s.sendall(Buffer)
Buffer = []
Спасибо за взглянуть, также благодаря Тони Львиного за предложение
Спасибо, у меня действительно было много ошибок, я попытаюсь использовать это сразу. В последнее время это была настоящая борьба за то, чтобы это работало. Верьте или нет, я был у него в течение 2-3 дней без большой удачи. Ваш ответ для меня много значит, а не только другой ответ с ссылкой на документацию. Я отправлю любые другие вопросы, если у меня их есть. – Micrified
Когда я запускаю это, он действует довольно странно. Вот что происходит: я открываю клиент # 1: И я подключаюсь к серверу. Затем я соединяю клиента № 2. (Ничего не происходит). Затем я ввожу что-то в сообщение «1 вашего клиента». Пользователь 2 не получает его. Однако, как только клиент 2 набирает и отправляет что-то, он получает сообщение. Теперь другой клиент не получает то, что только что отправил клиент 2. И он должен дождаться отправки сообщения, прежде чем он получит сообщение. Похоже, теперь вместо того, чтобы блокировать .recv. Похоже, что пользовательский вход останавливает процесс от получения и prin – Micrified
И печатает сообщение. Есть ли способ обойти это? Необходимы ли процессы? – Micrified