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

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

09.05.2019, 16:53. Показов 6724. Ответов 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru