Member 13059643 Ответов: 2

MFC добавление нового клиента в уже существующее клиент серверное приложение


У меня есть 2 внешних приложения в разных системах, и они подключены к каждому и обмениваются данными (отправляют, получают) на порту 4806.

IP-адрес системы а: 234.30.X.X
IP-адрес системы B: 192.168.X.X

Система B отправляет сообщение в систему A на порт 4806 каждые 3 секунды(я живу сообщениями)

Теперь мне нужно создать еще одно приложение в системе C и начать мониторинг сообщений, поступающих на порт IP-адреса системы a 4806.

1. Как я могу это сделать ? как добавить еще одно приложение для уже существующего клиент - сервера ?
2. Как следить за сообщениями, поступающими на системный порт 4806. Потому что система в не посылает никаких сообщений в мою систему С, так как она не знает, что такое система С.
3. Приложение на C система должна непрерывно отслеживать "я жив" сообщения по системе порт B 4806.

пожалуйста, проводите.

Что я уже пробовал:

попробовал использовать класс MFC CAsyncSocket, но немного запутался, как обрабатывать коммуникацию.

2 Ответов

Рейтинг:
9

Jochen Arndt

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

С моей точки зрения у вас есть только эти варианты:


  1. Пусть система а также отправит сообщение В С
  2. Пусть система B отправляет в C при приеме пакетов
  3. Пусть система С является сетевым сниффером. Это требует, чтобы он был помещен в сегмент сети, который видит сообщения (например, тот же сегмент, что и Система A или B, и гарантирует, что он получает данные, потому что коммутаторы могут передавать только пакеты для подключенных систем)
  4. Передача живых пакетов. Будет работать только в том же сегменте сети или локальных сетях, где маршрутизаторы настроены так, чтобы пропускать эти конкретные пакеты.


Member 13059643

@Йохен, спасибо за ваши комментарии, это, безусловно, дало мне некоторое представление о требовании. Обновлено с несколькими исправлениями к моей проблеме.

1. Системы А и в находятся в одном сегменте.
2. система C (недавно добавленная) будет иметь 2 карты NIC (по одной в тот же сегмент, где находятся A и B)

1. как мое приложение в новой системе C будет взаимодействовать с системой B, используя IP-адрес сетевой карты, который находится в том же сегменте, что и система B.
2. как мое приложение должно получать сообщения ("я жив") при поступлении в систему B из системы C на порт 4306.

Jochen Arndt

1. Это можно сделать только в соответствии с моими первыми двумя вариантами (C-это прослушивающий сервер, а A или B-клиенты, подключающиеся к C).
2. Для выше, как и любой TCP прослушивает сервер. Или используя мой 3-й (нюхательный) вариант, который требует перевести сетевой адаптер на C в беспорядочный режим.

Существует также 3-й вариант:
- Пусть B отправляет в C (нет необходимости обновлять программное обеспечение на B, если IP-адрес целевой системы может быть настроен)
- Пусть C отправляет в A (нет необходимости обновлять программное обеспечение на A, если источник пакетов не заботится)

Тогда C содержит аналогичный код, как A для приема пакетов и код, как B для отправки. Затем он действует как "экспедитор".

Member 13059643

Большое вам спасибо @Jochen

Рейтинг:
1

CPallini

Похоже, вам придется создать прокси-сервер, понимаете Прокси - сервер-Википедия[^].
Смотреть также: Google: "tcp proxy C++"[^].