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


Сокеты Windows. Последовательность операций

Демонстрирует гибкие на статью, параллельно, последовательность операций для сокета сокета сервера и клиента. Поскольку сокеты используют объекты 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 SSL. Порты и адреса сокета подробные сведения о портах.

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

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

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

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

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

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

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

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

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

См. также

Ссылки

Класс CSocket

CAsyncSocket::Create

CAsyncSocket::Close

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

Сокеты Windows в MFC