Форум программистов, компьютерный форум, киберфорум
Наши страницы

Python: Сети

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

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

24.04.2016, 20:37. Просмотров 601. Ответов 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()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2016, 20:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отправка сообщений всем подключенным клиентам (Python):

Отправка сообщений на электронную почту через скрипт на Python - Python
Не могу найти ошибку в коде: import smtplib content = "Hello from python" s = smtplib.SMTP('smtp.gmail.com', 587) s.ehlo() ...

Отправка сообщений всем клиентам - Java Сети
Здравствуйте. Создал многопоточный сервер, но никак не могу разобраться с тем, чтобы сервер отправлял сообщение всем клиентам а не только...

Сокеты. Отправка сообщений всем клиентам или только одному - C#
Здравствуйте, имеется вот такой сервер на C#: using System; using System.Collections.Generic; using System.Linq; using System.Text;...

разослать сообщения всем подключенным клиентам - Unity, Unity3D
может быть пишу не в нужный раздел, но более подходящего не нашёл, если не туда написал, перенесите тему в нужный раздел проблема...

Передача сообщения всем подключенным клиентам - Java EE
есть класс сервера package simplenetserver; /* * To change this template, choose Tools | Templates * and open the template...

PHP Sockets отсылка сообщений всем клиентам - PHP Сети
Недавно начал изучать PHP и пишу игру. Клиент на flash сервер на PHP. К серверу подключаются несколько клиентов и на сервере я сохраняю их...

3
alex925
2553 / 2204 / 524
Регистрация: 19.03.2012
Сообщений: 8,573
24.04.2016, 21:54 #2

Не по теме:

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



Если хочешь решить все правильно, то можешь посмотреть видео с докладом http://pythonz.net/videos/44/#fromrss
1
AvisMortes
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 15
24.04.2016, 22:15  [ТС] #3
Обязательно посмотрю, спасибо за ссылку, но все же есть ли возможность сделать это с потоками?
0
alex925
2553 / 2204 / 524
Регистрация: 19.03.2012
Сообщений: 8,573
24.04.2016, 22:21 #4
Возможно, но производительность такого сервера оочень быстро начнет проседать. Посмотри видео, там все с примерами объясняется и разбирается на сколько я помню прям твой случай.
1
24.04.2016, 22:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 22:21
Привет! Вот еще темы с ответами:

Отправка сообщения всем клиентам - Java Сети
Пишу (пробую) чат на сокетах. Клиент на андроиде. И не могу уже день разобратся с проблемой отправки сообщения всем клиентам. Я пробовал...

Server 2012 Отправка сообщений всем пользователям, и ОТКЛЮЧЕННЫМ в том числе - Windows Server
Необходимо отправлять сообщение на терминальном сервере ВСЕМ пользователям. Команда msg * "Текст сообщения" отправляет только активным...

Рассылка текста всем клиентам - Visual Basic .NET
Всем привет. Нужна помощь: Требуется разослать текст от сервера всем клиентам. Dim IP As IPAddress Dim Port As...

Как отправить данные всем клиентам - C#
Есть сервер static void Main(string args) { TcpListener server = null; try { ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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