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

Socket между двумя клиентами и сервером

09.05.2019, 16:53. Показов 6824. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Разобрал урок как делать обмен данными между сервером и клиентом, а как сделать обмен данными между двумя клиентами и сервером? Я так понимаю от клиента(1) приходит на сервер данные, они обрабатываются и переходят клиенту(2) и наоборот. Как в коде это проявить?
Клиент(1)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import socket
 
sock = socket.socket()
sock.connect(('localhost', 9090))
sock.send("hello client2!".encode())
 
data = sock.recv(1024).decode()
sock.close()
 
print(data)
Сервер
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import socket
 
sock = socket.socket()
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()
 
print('connected:', addr)
 
while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.send(data.upper())
conn.close()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.05.2019, 16:53
Ответы с готовыми решениями:

Работа между 2 клиентами и 1 сервером
Добрый день. У меня возникла проблема все с теми же сокетами... вообщем есть 3 приложения: 2 клиента и 1 сервер. В одном клиенте вносятся...

Связь между сервером и клиентами
Всем привет. Работаю над приложением сервер/клиенты. И появились чисто организационные вопросы: 1)Хотелось бы что бы клиенты...

Синхронизация данных между сервером и клиентами
Добрый день! Побродив пару дней по интернету у меня сложилось впечатление, что многопользовательские программы - это очень большая...

8
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.05.2019, 17:18
Я не думаю, что нужно передавать данные от клиента к клиенту. Если вы только не пишите экзотичную проксю.

Скорей всего в задании подразумевается использование много поточности: сервер одновременно работает с несколькими клиентами.
0
1 / 1 / 0
Регистрация: 04.04.2019
Сообщений: 80
09.05.2019, 17:27  [ТС]
ну есть к примеру 3 файла python. Один файл - клиент(1), второй файл - сервер, третий файл - клиент(2). И нужно чтобы например sock.send() перешел другому клиенту через сервер и наоборот
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
14.05.2019, 17:29
vendigo148, так ты и запускай 3 скрипта. 1 скрипт - сервер висит в одном терминале, 2 скрипт - клиент номер 2 висит во втором терминале и так же 3 скрипт - клиент 3 висит в 3 терминале.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
14.05.2019, 17:36
Вованя, это не будет работать, так как сейчас сервер не умеет обрабатывать более одного входящего соединения.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
14.05.2019, 21:34
Рыжий Лис, да, безусловно вы правы, обратил внимание только на цикл recv, а не accept
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.05.2019, 15:47
ТС, можно сделать двумя способами:
1) select для входящих соединений (не уверен, что будет работать).
2) пилить многопоточность и как-то перекидывать данные из одного потока в другой.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
15.05.2019, 18:07
Рыжий Лис, select будет работать, но, очевидно, что тс только учится, и вряд ли ему сейчас это надо, так же по поводу и многопоточности. На мой взгляд проще
Сервер:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
 
sock = socket.socket()
sock.bind(('', 9090))
sock.listen(2)
 
conn, addr = sock.accept()
print('connected:', addr)
while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.close()
 
conn, addr = sock.accept()
print('connected:', addr)
conn.send(data)
conn.close()
Криво, конечно, но для обучения, длумаю, пойдет)
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
15.05.2019, 20:39
Цитата Сообщение от vendigo148 Посмотреть сообщение
Я так понимаю от клиента(1) приходит на сервер данные, они обрабатываются и переходят клиенту(2) и наоборот. Как в коде это проявить?
клиенты должны передавать свое имя, имя клиента для которого сообщение и само сообщение. сервер должен уметь обрабатывать входящий пакет, сохранять данные. при подключении другого клиента проверять есть ли сообщение для него (по имени) и отправлять ответ если есть это самый простой вариант при работе с одним соединением
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2019, 20:39
Помогаю со студенческими работами здесь

Синхронизация времени между клиентами и сервером
Есть тестовый простой игровой сервак, и клиенты, соединение есть, пакеты пересылаются. Мне необходимо как-то находить задержку, между...

Пакеты данных между сервером и клиентами
Всем привет. У меня между сервером и клиентами бегают пакеты с формате json. Формирую я их с обоих сторон. Например клиент...

Как передать данные между клиентами Socket-a
Можете подсказать как передать данные между несколькими клиентами через сервер. Сервер на Socket простой и примитивный из примеров...

Как сделать обмен сообщением между двумя клиентами
У меня есть два клиента, которые обмениваются сообщением по очереди, и сервер. Как можно это реализовать? Только начинаю изучать сокеты,...

Сервер для обмена сообщений между двумя клиентами
Добрый день, недавно начал осваивать сети, но у меня возникло несколько проблем. Был бы очень признателен за помощь. Собственно,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
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