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


Windows sockets: последовательность операций

Показаны в этой статье, параллельно, последовательность операций сокета для сокета сервера и клиента.Поскольку сокета, использующие объекты CArchive, они не обязательно сокета потока.

Последовательность операций для связи сокета потока

До момента создания объекта CSocketFile, следующая последовательность точной (с несколькими разнец в параметров) как для CAsyncSocket, так и для CSocket.Из точки, последовательность строго для CSocket.В следующей таблице показана последовательность операций для настройки взаимодействие между клиентом и сервером.

Связь создания между сервером и клиентом

Server

Клиент

// construct a socket

CSocket sockSrvr;

// construct a socket

CSocket sockClient;

// create the SOCKET

sockSrvr.Create(nPort);1,2

// create the SOCKET

sockClient.Create( );2

// start listening

sockSrvr.Listen( );

 

 

// seek a connection

sockClient.Connect(strAddr, nPort);3,4

// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5

 

// construct file object

CSocketFile file(&sockRecv);

// construct file object

CSocketFile file(&sockClient);

// construct an archive

CArchive arIn(&file, CArchive::load);

-или-

CArchive arOut(&file,CArchive::store);

– или – 

// construct an archive

CArchive arIn(&file, CArchive::load);

-или-

CArchive arOut(&file,CArchive::store);

 – или – 

// use the archive to pass data:

arIn >> dwValue;

-или-

arOut << dwValue;6

// use the archive to pass data:

arIn >> dwValue;

-или-

arOut << dwValue;6

1.Где nPort номер порта.См. раздел Windows sockets: Порты и адрес сокета дополнительные сведения о портах.

2.Сервер должен всегда задавать порт, поэтому клиенты могут подключиться.Вызов Создать иногда также указывает адрес.На стороне клиента, используйте параметры по умолчанию, которые запрашивают MFC для использования любого доступного порта.

3.Где nPort номер порта и strAddr адрес компьютера или адрес IP (IP).

4.Адрес компьютера может принимать различные формы: «ftp.microsoft.com», «microsoft.com».Ip-адреса, использующих «форма «127.54.67.32» number», содержащееся точки.Функции Подключить проверяет, является ли предоставленный адрес точки номер (хотя он не проверяет, чтобы предоставить допустимый номер компьютер в сети).Если нет, Подключить принимает имя компьютера одной из других форм.

5.При вызове Принять на стороне сервера, можно передать ссылку на новый объект сокета.Необходимо вначале создать этот объект, но не вызывайте Создать для него.Имейте в виду, что, если данный объект сокета выходит из области, то закрывает соединение.MFC подключается новый объект на маркер SOCKET.Можно создавать сокет в стеке, как показано ниже или на куче.

6.Архив и закрыть файл сокета, когда они идут из области.Деструктор объекта сокета также вызывает функцию-член Закрыть для объекта сокета, если объект выходит из области или удален.

Дополнительные примечания о последовательности

Последовательность вызовов, перечисленных в приведенной выше таблице для сокета потока.Сокеты датаграмм, которые connectionless, не требующих CAsyncSocket::Connect, ожидать передачи данных и вызовов Принять (хотя при необходимости можно использовать Подключить).Вместо этого при использовании класса CAsyncSocket, сокеты датаграмм используют функции-члены CAsyncSocket::SendTo и ReceiveFrom.(Если используется Подключить с сокетом датаграмм, то используется Отправить и Receive). Поскольку CArchive не работает с датаграммами не используйте CSocket компоновки, если сокет датаграмма.

CSocketFile не поддерживает все entity_CODECFile функциональности; члены CFile как Seek, которые не поддерживают никакого смысла для связи сокета, недоступна.Поэтому некоторые по умолчанию имеет значение функции MFC Serialize не совместим с CSocketFile.Это особенно верно класса CEditView.Не следует пытаться сериализации данных CEditView через объект CArchive вложенный в объект CSocketFile с помощью CEditView::SerializeRaw; используйте вместо CEditView::Serialize (не описывается).Функция SerializeRaw ожидает объект файла, чтобы иметь функции, такие как Seek, CSocketFile не поддерживает.

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

См. также

Ссылки

Класс CSocket

CAsyncSocket::Create

CAsyncSocket::Close

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

Windows sockets в MFC