15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


TCP клиент-сервер


Автор: Zarembo Maxim.

О ПРОГРАММЕ

Исходник программы, написаный на С++, который демонстрирует как использовать стандартную библиотеку winsock для организации соединения по протоколу TCP клиент(client)-сервер(server) с подробнейшими коментариями на русском. Кроме стандартных функций winsock, которые поддерживаются практически на любой платформе, представлены функции из библиотеки IPHLPAPI из пакета PDK, которые служат для добавления, удаления IP адресов и получении информации об интерфейсах сетевых адаптеров. Исходные тексты компилировались и отлаживались в Microsoft Visual Studio 6.0(SP4). Главное диалоговое окно и графический интерфейс написаны с поддержкой MFC. Используемые функции winsock и IPHLPAPI могут быть перенесены в любую другую оболочку разработчика (Borland 5.02, Builder 5) с малым изменением кода без потери функциональности. Пример программы предназначается для изучения принципов пограммирования сети по протоколу TCP, используя библиотеку winsock начинающими и написания по этому шаблону программы, а также для тех кто не смог ещё разобраться по английской документации. Хотя данный исходник будет также полезен и для профессионалов, которые ещё не работали с библиотекой IPHLPAPI, функции которой можно использовать, например, для добавления к интерфейсу сетевого адаптера дополнительного IP адреса без перезагрузки компьютера, чем-то похоже на программу от Microsoft route. Например, для организации кластера на NT4 для резервирования главного сервера, т.е при отказе основной машины резервная появляется в сети с тем же IP адресом не перегружаясь, а сразу же после отсуствия отклика от главного сервера, беря на себя все функции по организации соединения с клиентами и выдачу для них полезной информации.

НАЗНАЧЕНИЕ КЛАВИШ И ПОЛЕЙ

IP ADDRESS - для задания IP адреса. Перед установкой IP адреса проверьте нету ли уже такого IP адреса в сети утилитой ping, которую вы можете запустить, нажав на клавишу 'PING'. Пример: 172.17.1.6

MASK - для задания маски сети. Пример: 255.255.255.0

№ Interface - для задания номера интерфейса. Это необходимо для добавления дополнительного IP адреса. Номер интерфейса вы можете посмотреть, нажав клавишу 'INFO'.

Server - тип соединения, при котором программа будет ожидать соединения клиента и приёма от него сообщений на заданный порт.

Client - тип соединения, при котором программа может подключиться к удалённому серверу, на котором запущен сервер, и переслать сообщения. Одновременно может быть выбран только один тип соединения или 'Server', или 'Client'.

№ port - номер порта, предназначеный для соединения.

Message_Send - поле для задания сообщения, предназначенное для отправления данных на удалённый сервер.

Message_reciev - поле, в котором отображается принятое от клиента сообщение.

ADD - для добавления нового дополнительного IP адреса к заданному интерфейсу. Обязательно должны быть заданы новый IP адрес, маска сети и номер интерфейса сетевого адаптера.

DELETE - для удаления дополнительного IP адреса который был добавлен к заданному интерфейсу. Чтобы удалить надо задать контекст. Пример смотри ниже.

PING - запуск стандартной утилиты для проверки активности удалённой станции. Обязательный параметр IP адрес.

INFO - для получения на локальной станции информации о сетевых адаптерах: IP адресов, MAC адресов, интерфейсов.

SEND - для отправления сообщения, набранного в поле 'Message_Send'.

ABOUT - для связи с разработчиком.

 

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ

1)клиент-сервера Запускаем программу dialog.exe на любых двух компьютерах, один компьютер будет у нас сервером, другой клиентом, на них должна быть правильно настроена сеть. На станции, которую мы приняли за сервер запускаем серверную часть, задав номер порта в поле '№ port'(по умолчанию номер порта равен 3182), а затем выбрав клавишу 'Server'. На клиенте запускаем клиентскую часть, указав IP адрес в поле 'IP ADDRESS' (по умолчанию IP адрес равен адресу локальной станции 127.0.0.1), задав номер порта и нажав на клавишу 'Client'. После этих действий удалённый сервер готов получать от клиента сообщения. Для отправки сообщения от клиента, надо написать ваше сообщение в поле 'Message_Send' и нажать на клавишу 'SEND'. Удалённый cервер практически сразу получит сообщение, если вы всё правильно настроили, которое отобразится в графе 'Message_ reciev'. После получения сообщения, сервер пересылает клиенту подтверждение приёма, которое отобразится у клиента в виде строки "Server recieved" в поле 'Message_reciev'. При выходе из клиента, сервер закрывает созданное соединение и инициализируется для ожидания другого соединения.

2)функций библиотеки IPHLPAPI. Запускаем на локальной станции с операционной системой NT4 dialog.exe. Наш локальный адрес 172.17.1.3, маска 255.255.255.0. Обычно номер интерфейса на NT станции, на которой одна лишь сетевая карточка и нету модемов равен 2, так как первый интерфейс отведён для LOOPBACK. Вы можете проверить значение своего интерфейса, нажав клавишу 'INFO'. Хотя для NT4, функции просмотра интерфейсов не поддерживаются, программа вам запустит утилиту route. В нашем примере значение интерфейса равно двум. Прописываем дополнительный IP адрес в поле 'IP ADDRESS', например, 172.17.1.5, в поле 'MASK' маску сети 255.255.255.0, в поле '№ Interface' номер интерфейса 2. Перед тем как добавить этот IP адрес, нажав на клавишу 'ADD', проверяем нету ли в нашей сети уже такого хоста, нажав на клавишу 'PING'. При отсуствии ответа от станции, т.е. если утилита всё время будет отображать сообщение "Request timed out.", можете добавлять новый адрес. Для удаления созданного нами дополнительного IP адреса, указываем только номер контекста в поле '№ Interface'. После первого добавления, номер контекста будет в нашем примере равен 3, после последующих добавлений, номер будет возрастать при каждом новом добавлении на единицу.

Работа с функциями IPHLPAPI аналогична работе с программой route, одно из отличий, что все описанные выше действия вы осуществляете программно, а не через скрипты.

В исходнике так же содержится статья о TCP протоколе.

Downloads

Скачать исходник - 124 Kb