Windows sockets: Использование сокета с архивами
В данной статье описан модель программирования CSocket.Предоставляет поддержку сокета CSocket класса на более высоком уровне абстракции не делает класс CAsyncSocket.CSocket использует версию протокола сериализации MFC для передачи данных и сокеты MFC из объекта с помощью объекта CArchive.CSocket предоставляет (пока блокировки управление фоновой обработки сообщений windows) и обеспечивает доступ к CArchive, который управляет многие аспекты сообщения что необходимо сделать с помощью API или начальное или класс CAsyncSocket.
Совет |
---|
Можно использовать класс CSocket сама по себе как более удобная версия CAsyncSocket, но наиболее простая модель программирования использовать CSocket с объектом CArchive. |
Дополнительные сведения о том, как реализация сокетов с архивами см. в разделе Windows sockets: Как работают с архивами сокета.Пример кода см. в Windows sockets: последовательность операций и Windows sockets: Пример сокетов использование файлов.Дополнительные сведения о некоторых функциональных возможностей можно получить путем наследования собственные классы от классов сокетов см. в разделе Windows sockets: Наследование от классов сокета.
Примечание |
---|
При написании клиентской программы MFC для взаимодействия с заданы несовместимые с mfc servers (), не отправить через объекты C++ в архиве.Если сервер не сможет приложение MFC, который понимает типы объектов требуется отправить, оно не будет получать и выполнять десериализацию объекты.Для связанного объекта material на предмете взаимодействия с приложениями, не являющихся mfc, см. статью Windows sockets: Порядок байтов. |
Модель программирования CSocket
Использование объекта CSocket позволяет создать и связать вместе несколько объектов класса MFC.В общей процедуре ниже, каждый гнездом предпринят, как сервера, так и клиента гнездом, за исключением шаге 3, в котором каждый тип сокета требует другую действия.
Совет |
---|
Во время выполнения серверное приложение обычно запускается в первую очередь, чтобы быть готово» и «прослушивает когда клиентское приложение искает соединение.Если сервер не будет готов, когда клиент пытается подключиться, как правило, требуется приложение пользователя попытаться подключиться попытку позже. |
Настроить обмен данными между гнездом сервера и клиента гнездом
Создайте объект CSocket.
Используйте этот объект для создания основной маркер SOCKET.
Для объекта клиента CSocket необходимо обычно использовать параметры по умолчанию в Создать, если не нужен сокет датаграмм.Для объекта сервера CSocket, необходимо определить порт при вызове Создать.
Примечание CArchive не работает с сокетами датаграмм.Если нужно использовать CSocket для сокета датаграмм, то следует использовать класс как класс CAsyncSocket, т е без архива.Поскольку датаграммы ненадежны (не гарантируется, что и может быть получен повторенн или из последовательности), они не совместимы с сериализацией с помощью архива.Ожидается завершение операции сериализации для надежной и в последовательности.При попытке использовать CSocket с объектом CArchive для датаграмм, то утверждения MFC.
Если сокет клиента, вызовите CAsyncSocket::Connect для подключения к гнезду объект сокета сервера.
-или-
Если сокет сервер, вызовите CAsyncSocket::Listen, чтобы начать ожидать подключения попытки от клиента.При получении запроса соединения, примите его путем вызова CAsyncSocket::Accept.
Примечание Функция-член Принять принимает ссылку на новый, пустой объект CSocket в качестве параметра.Этот объект необходимо построить до вызова Принять.Если этот объект сокета выходит из области, то закрывает соединение.Не вызывайте Создать для этого нового объекта сокета.
Создайте объект CSocketFile, связывание объект CSocket с ним.
Создайте объект CArchive для загрузки (get) или сохранить данные (отправки).Архив связанный с объектом CSocketFile.
Имейте в виду, что CArchive не работает с сокетами датаграмм.
Используйте объект CArchive к данным для передачи между клиентом и гнездами сервера.
Имейте в виду, что данный объект CArchive перемещает данные только в одном направлении. или для загрузки (get) или хранения (отправки).В некоторых случаях, возможно, потребуется использовать 2 объекта CArchive : одно для отправки данных, другое для получения подтверждения.
После принятия запроса на подключения и настраивать архив, можно выполнять такие задачи, как проверка пароли.
Destroy архив файл сокета, а объекты сокета.
Примечание Предоставляет CArchive класса функцию-член IsBufferEmpty специально для использования с классом CSocket.Если буфер содержит несколько сообщений данных, например, организация цикла, пока все они не считываются и буфер очищается.В противном случае следующее уведомление, что данные, которые необходимо получить, может постоянно быть отложено.Используйте IsBufferEmpty, чтобы обеспечить, что вы получите все данные.
На статью Windows sockets: последовательность операций показывает обе стороны этого процесса с кодом примера.
Дополнительные сведения см. в следующих разделах.