Форум программистов, компьютерный форум CyberForum.ru

Python: Сети

Войти
Регистрация
Восстановить пароль
 
AvisMortes
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 14
#1

Отправка сообщений всем подключенным клиентам - Python

24.04.2016, 20:37. Просмотров 444. Ответов 3

Как реализовать отправку всех сообщений которые поступили на сервер, всем клиентам(потокам)?
Пытался реализовать внутри класса ClientThread отправкой через self.conn.send(), но он отправляет только одному объекту класса

Код клиента:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import socket
 
clntsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
clntsock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
 
    
def connect():
    clntsock.connect(('localhost',9090))
    data = clntsock.recv(1024)
    udata = data.decode('utf-8')
    print(udata)
    while True:
        out = input('Mess: ')
        b_out = out.encode('utf-8')
        clntsock.send(b_out)
 
 
if __name__ == '__main__':
    connect()
Код сервера:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import socket
import threading
 
servsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
servsock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
servsock.bind(('localhost',9090))
servsock.listen(True)
 
welcome = b'Welcome from new chat'
 
def main():
    while True:
        conn,addr = servsock.accept()
        ClientThread(conn,addr).start()
 
 
class ClientThread(threading.Thread):
 
    def __init__(self,conn,addr):
        self.conn = conn
        self.addr = addr
        threading.Thread.__init__(self)
 
    def run(self):
        try:
            self.conn.send(welcome)
            print(self.addr , ' "Подключился"')
            while True:
                data = self.conn.recv(1024)
                udata = data.decode('utf-8')
                print(udata)
        except ConnectionResetError:
             self.conn.close()
             print(self.addr , ' "Соединение разорванно"')
 
if __name__ == '__main__':
    main()
    servsock.close()
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2016, 20:37     Отправка сообщений всем подключенным клиентам
Посмотрите здесь:

Передача сообщения всем подключенным клиентам Java EE
Рассылка текста всем клиентам Visual Basic .NET
PHP Sockets отсылка сообщений всем клиентам PHP Сети
Отправка сообщений всем клиентам Java Сети
socket & HTTP: отправка нетекстового файла Python
разослать сообщения всем подключенным клиентам
C# .NET 3.x Необходимо отправить массив байтов всем подключенным клиентом, но они все на разных потках
Как вывести всем клиентам сообщение? Java Сети
C# Как отправить данные всем клиентам
Отправка сообщения всем клиентам Java Сети
Windows Server Server 2012 Отправка сообщений всем пользователям, и ОТКЛЮЧЕННЫМ в том числе
C# Сокеты. Отправка сообщений всем клиентам или только одному

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex925
2317 / 1983 / 456
Регистрация: 19.03.2012
Сообщений: 7,758
24.04.2016, 21:54     Отправка сообщений всем подключенным клиентам #2

Не по теме:

очень плохая идея использовать потоки для таких вещей



Если хочешь решить все правильно, то можешь посмотреть видео с докладом http://pythonz.net/videos/44/#fromrss
AvisMortes
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 14
24.04.2016, 22:15  [ТС]     Отправка сообщений всем подключенным клиентам #3
Обязательно посмотрю, спасибо за ссылку, но все же есть ли возможность сделать это с потоками?
alex925
2317 / 1983 / 456
Регистрация: 19.03.2012
Сообщений: 7,758
24.04.2016, 22:21     Отправка сообщений всем подключенным клиентам #4
Возможно, но производительность такого сервера оочень быстро начнет проседать. Посмотри видео, там все с примерами объясняется и разбирается на сколько я помню прям твой случай.
Yandex
Объявления
24.04.2016, 22:21     Отправка сообщений всем подключенным клиентам
Ответ Создать тему
Опции темы

Текущее время: 00:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru