Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 02.04.2022
Сообщений: 73

Отправка сообщений socket

24.07.2022, 12:34. Показов 2272. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я делаю TCP чат, мне нужно сделать отправку сообщения к каждому подключению, но когда в дело вступают input, возникают повторы inputов и т.п.
Код:
def message():
while True:
cmd = input('Команда: ')
if cmd == 'msg':
th = input('Тема сообщения: ')
content = input('Текст: ')
for x in conns:
x.send(str.encode(th))
x.send(str.encode(content))


def connect():
while True:
global conn, addr
conn, addr = server.accept()
conns.append(conn)
threading.Thread(target=message).start()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2022, 12:34
Ответы с готовыми решениями:

CashCode CCNET на Python. Отправка сообщений в порт
Приветствую, форумчане! Имеется купюроприемник CashCode SM2073 с прошивкой CCNET в количестве 1 штука. Задача следующая - написать...

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

Странности с отправкой сообщений. (socket)
Добрый день! Возникла некоторая проблема, дело в том что при отправке сообщений (одного длинного и одного короткого) после 520-580 знака...

10
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.07.2022, 20:27
Цитата Сообщение от hddppdpp Посмотреть сообщение
но когда в дело вступают input, возникают повторы inputов и т.п.
что Вы имеете ввиду?
0
1 / 1 / 0
Регистрация: 02.04.2022
Сообщений: 73
24.07.2022, 22:48  [ТС]
трудно объяснить. когда я пишу команду msg ничего не происходит, и мне нужно написать команду столько раз сколько и подключений. к примеру:
Команда: msg
Команда: msg
Тема сообщения:
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
25.07.2022, 00:30
Тогда покажите полный текст клиента и сервера, и пожалуйста оформите его в тэги кода питон, в обратном случае смотреть не буду.
0
1 / 1 / 0
Регистрация: 02.04.2022
Сообщений: 73
25.07.2022, 05:21  [ТС]
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
Server:
conns = []
sip = ""
sp = 555
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((sip, sp))
server.listen()
def message():
 while True:
  cmd = input('Команда: ')
  if cmd == 'msg':
   th = input('Тема сообщения: ')
   content = input('Текст: ')
   for x in conns:
    x.send(str.encode('msg'))
    x.send(str.encode(th))
    x.send(str.encode(content))
 
 
def connect():
 while True:
  global conn, addr
  conn, addr = server.accept()
  conns.append(conn)
  threading.Thread(target=message).start()
 
Client:
ip = "127.0.0.1"
port = 555   
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((ip, port))
while True:
    data = client.recv(1024).decode("utf-8")
    if data == 'msg':
        th = str(client.recv(1024), "utf-8")
        content = str(client.recv(1024), "utf-8")
        print(f'Сообщение от администратора\nТема: {th}\n{content}')
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
25.07.2022, 08:04
Лучший ответ Сообщение было отмечено Fudthhh как решение

Решение

Как-то так (я немного исправил Ваш код)?

server:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from functools import partial
import signal
import socket
import threading
 
 
def my_tcp_server(server, clients):
    # Thread running this code accepts
    # connections and adds them to the list
    try:
        while True:
            conn, _ = server.accept()
            clients.append(conn)
    except ConnectionAbortedError as e:
        pass
 
 
def signal_handler(server, clients, signum, frame):
    # When server is Keyboard Interrupted, this code
    # disconnects clients and closes socket
    if clients:
        print("\nDisconnecting clients")
    for c in clients:
        c.close()
    print("\nShutting down server...")
    server.close()
    exit(0)
 
 
if __name__ == "__main__":
    ip = ""
    port = 555
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind((ip, port))
    server.listen()
 
    clients = []
 
    threading.Thread(target=my_tcp_server, args=(server, clients)).start()
    signal.signal(signal.SIGINT, partial(signal_handler, server, clients))
 
    while True:
        try:
            msg = input("Send message:")
            for c in clients:
                c.send(msg.encode('utf-8'))
        except BrokenPipeError:
            # client got disconnected?
            print(f"Couldn't send message to client {c.fileno()}, removing.")
            c.close()
            clients.remove(c)
client:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import socket
 
 
ip = "127.0.0.1"
port = 555
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((ip, port))
 
while True:
    try:
        data = client.recv(1024).decode("utf-8")
        if not data:
            print("Disconnected")
            break
        print(f'Сообщение от администратора: {data}')
    except KeyboardInterrupt:
        print("\nShutting down client...")
        break
0
1 / 1 / 0
Регистрация: 02.04.2022
Сообщений: 73
25.07.2022, 11:59  [ТС]
Спасибо!
0
1 / 1 / 0
Регистрация: 02.04.2022
Сообщений: 73
26.07.2022, 14:55  [ТС]
А не подскажите как можно отправлять сообщение определенному клиенту?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
26.07.2022, 15:07
У меня встречный вопрос - что значит определенному? Определенному по очереди в порядке подключения, или с определенным ip, или с определённым портом?..
0
1 / 1 / 0
Регистрация: 02.04.2022
Сообщений: 73
26.07.2022, 17:12  [ТС]
с определенным айпи
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
26.07.2022, 19:07
ok, с определенным IP - нужно сделать какую-то логику, где код будет понимать, что сообщение идет одному получателю, например мы можем отформатировать наше сообщение вот так

ip 192.168.12.23 HELLO THERE!

После этого нужно обойти список с сокетами и найти тот, где ip будет равен введенному, вот пример кода (while True цикл из предыдущего кода)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    while True:
        try:
            msg = input("Send message:")
 
            if msg.startswith('ip'):
                _, ip, msg = msg.split(maxsplit=2)
                for c in clients:
                    if c.getpeername()[0] == ip:
                        c.send(msg.encode('utf-8'))
                        break
            else:
                for c in clients:
                    c.send(msg.encode('utf-8'))
        except BrokenPipeError:
            # client got disconnected?
            print(f"Couldn't send message to client {c.fileno()}, removing.")
            c.close()
            clients.remove(c)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2022, 19:07
Помогаю со студенческими работами здесь

socket & HTTP: отправка нетекстового файла
Пишу простеньких HTTP сервер на основе модуля socket. Встала проблема в нормальной отправки файлов. Полный код приводить не вижу смысла,...

Отправка сообщений на почту
import email, smtplib, ssl from email import encoders from email.mime.base import MIMEBase from email.mime.multipart import...

Gmail отправка сообщений
Всем привет пишу скрипт для отправки сообщений на почты через python. И я наткнулся на такую новость от google - "Чтобы защитить...

Отправка голосовых сообщений
Подскажите, пожалуйста, как отправить голосовое сообщение. Отправить как голосовое сообщение нужно mp3 файл с компа

Отправка ICMP сообщений
Помогите, пожалуйста, с задачей, нужно реализовать отправку ICMP сообщений на заданный узел сети с получением ответов на эти сообщения....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru