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

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

24.07.2022, 12:34. Показов 2184. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru