Создание сетевого приложения
В качестве примера сетевого приложения создадим диалоговое приложение, которое сможет работать либо в качестве сервера, либо в качестве клиента. Это позволит проверить созданное приложение, если запустить две копии приложения, по одной на каждом конце соединения. Эти две копии могут быть расположены или на одном компьютере, или же одна из копий может быть установлена на другом компьютере, тогда два приложения будут работать на различных компьютерах, передавая сообщения по сети. После этого можно проверить созданное приложение в работе. После того, как между приложениями будет установлено соединение, можно передавать сообщения от одного приложения другому.
После того, как сообщение послано, оно будет добавлено в список переданных сообщений. В свою очередь каждое полученное сообщение будет помещено в список всех полученных сообщений. Это позволит затем сравнить списки полученных и посланных сообщений и убедиться, что они совпадают.
Класс CAsyncSocket
Класс CAsyncSocket инкапсулирует асинхронные вызовы Winsock. Он содержит набор полезных функций, использующих Winsock API.
Таблица 4.1. Методы класса CAsyncSocket
Метод |
Назначение |
Accept |
Обрабатывает запрос на соединение, который поступает на принимающий сокет, заполняя его информацией об адресе. |
AsyncSelect |
Организует посылку сообщения Windows при переходе сокета в состояние готовности |
Attach |
Связывает дескриптор сокета с экземпляром класса CAsyncSocket, чтобы иметь возможность сформировать соединение с др. компьютером. |
Bind |
Ассоциирует адрес с сокетом. |
Close |
Закрывает сокет. |
Connect |
Подключает сокет к удаленному адресу и порту. |
Create |
Завершает процесс инициализации, начатый конструктором. |
GetLastError |
Возвращает код ошибки сокета. |
GetPeerName |
Определяет адрес IP и номер порта удаленного компьютера. |
GetSockName |
Возвращает адрес IP и номер порта объекта this. |
Listen |
Заставляет сокет следить за запросами на соединение. |
OnAccept |
Обрабатывает сообщение Windows, которое формируется при приеме гнездом запроса на соединение. Часто переопределяется в производных классах. |
OnClose |
Обрабатывает сообщение Windows, которое формируется при закрытии сокета. Часто переопределяется в производных классах. |
OnConnect |
Обрабатывает сообщение Windows, которое формируется после установки соединения или после неудачной попытки соединиться. |
OnReceive |
Обрабатывает сообщение Windows, которое формируется при появлении данных, которые можно прочесть с помощью Receive(). |
OnSend |
Обрабатывает сообщение Windows, которое формируется при готовности гнезда принять данные, посылаемые с помощью Send(). |
Receive |
Считывает данные с удаленного компьютера, к которому подключен сокет. |
Send |
Посылает данные удаленному компьютеру |
SetSockOpt |
Устанавливает параметры сокета |
ShutDown |
Оставляет сокет открытым, но предотвращает дальнейшие вызовы Send() или Receive(). |