Мой сервер, закодированный в pyhon 3, не отправляет сообщения всем пользователям - PullRequest
0 голосов
/ 25 июня 2018

Я начал изучать программирование сокетов в Python 3 , и я пытаюсь создать сервер чата TCP, который может поддерживать несколько пользователей, но он не работает, потому что сервер не отправляет сообщение всем пользователям, этоотправляет сообщение обратно только тому, кто отправил сообщение.

Это код моего сервера (извините, что я нуб):

import socket
from _thread import *

sk = socket.socket()
sk.bind(('', 3000))
sk.listen(5)


def client(conn):
    while True:
        data = conn.recv(1024)
        if not data:
            break
        mess = data.decode('utf-8')
        print(mess)
        conn.sendall(data)



if __name__ == '__main__':
    print("server started")
    while True:
        conn, id = sk.accept()
        print("{} conected".format(id))
        start_new_thread(client, (conn,))

и это мой клиент:

import socket
import threading

sk = socket.socket()
target_ip = input("ip : ")
port = int(input("port: "))
sk.connect((target_ip, port))

def send():
    mess = input()
    while mess != 'EXIT':
        mess = str.encode(mess)
        sk.send(mess)
        mess = input()




def listen():
        while True:
            data = sk.recv(1024)
            mess = data.decode('utf-8')
            if mess == 'zalinga':
                quit()
            else:
                print(mess)


if __name__ == '__main__':
    t1 = threading.Thread(target = send)
    t2 = threading.Thread(target = listen)
    t1.start()
    t2.start()

Я не знаю, в чем проблема, но я не получаю никаких ошибок.

1 Ответ

0 голосов
/ 26 июня 2018

Прежде чем вы начнете новый поток для прослушивания соединения, вам нужно добавить это соединение в некоторую коллекцию соединений.

Когда вы получаете данные, а не отправляете их в сокет, который отправил вам данныепереберите коллекцию и отправьте данные каждому сокету в списке.Также рассмотрите возможность одновременной отправки идентификатора сокета, чтобы вы знали, кто отправил вам информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...