Поделиться через


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, в котором каждый тип сокета требует другую действия.

СоветСовет

Во время выполнения серверное приложение обычно запускается в первую очередь, чтобы быть готово» и «прослушивает когда клиентское приложение искает соединение.Если сервер не будет готов, когда клиент пытается подключиться, как правило, требуется приложение пользователя попытаться подключиться попытку позже.

Настроить обмен данными между гнездом сервера и клиента гнездом

  1. Создайте объект CSocket.

  2. Используйте этот объект для создания основной маркер SOCKET.

    Для объекта клиента CSocket необходимо обычно использовать параметры по умолчанию в Создать, если не нужен сокет датаграмм.Для объекта сервера CSocket, необходимо определить порт при вызове Создать.

    ПримечаниеПримечание

    CArchive не работает с сокетами датаграмм.Если нужно использовать CSocket для сокета датаграмм, то следует использовать класс как класс CAsyncSocket, т е без архива.Поскольку датаграммы ненадежны (не гарантируется, что и может быть получен повторенн или из последовательности), они не совместимы с сериализацией с помощью архива.Ожидается завершение операции сериализации для надежной и в последовательности.При попытке использовать CSocket с объектом CArchive для датаграмм, то утверждения MFC.

  3. Если сокет клиента, вызовите CAsyncSocket::Connect для подключения к гнезду объект сокета сервера.

    -или-

    Если сокет сервер, вызовите CAsyncSocket::Listen, чтобы начать ожидать подключения попытки от клиента.При получении запроса соединения, примите его путем вызова CAsyncSocket::Accept.

    ПримечаниеПримечание

    Функция-член Принять принимает ссылку на новый, пустой объект CSocket в качестве параметра.Этот объект необходимо построить до вызова Принять.Если этот объект сокета выходит из области, то закрывает соединение.Не вызывайте Создать для этого нового объекта сокета.

  4. Создайте объект CSocketFile, связывание объект CSocket с ним.

  5. Создайте объект CArchive для загрузки (get) или сохранить данные (отправки).Архив связанный с объектом CSocketFile.

    Имейте в виду, что CArchive не работает с сокетами датаграмм.

  6. Используйте объект CArchive к данным для передачи между клиентом и гнездами сервера.

    Имейте в виду, что данный объект CArchive перемещает данные только в одном направлении. или для загрузки (get) или хранения (отправки).В некоторых случаях, возможно, потребуется использовать 2 объекта CArchive : одно для отправки данных, другое для получения подтверждения.

    После принятия запроса на подключения и настраивать архив, можно выполнять такие задачи, как проверка пароли.

  7. Destroy архив файл сокета, а объекты сокета.

    ПримечаниеПримечание

    Предоставляет CArchive класса функцию-член IsBufferEmpty специально для использования с классом CSocket.Если буфер содержит несколько сообщений данных, например, организация цикла, пока все они не считываются и буфер очищается.В противном случае следующее уведомление, что данные, которые необходимо получить, может постоянно быть отложено.Используйте IsBufferEmpty, чтобы обеспечить, что вы получите все данные.

На статью Windows sockets: последовательность операций показывает обе стороны этого процесса с кодом примера.

Дополнительные сведения см. в следующих разделах.

См. также

Ссылки

CSocket::Create

Основные понятия

Windows sockets в MFC