Windows套接字:操作的顺序

本文说明,并行,操作的顺序服务器套接字和客户端套接字的。 由于套接字使用 CArchive 对象,则必须是 流套接字

操作的顺序流存储的通信

到构造 CSocketFile 对象点,下面的顺序。 CAsyncSocketCSocket是准确 (有几个参数区别)。 此后,顺序是严格为 CSocket。 下表阐释了操作的顺序设置通信的客户端和服务器之间。

服务器和客户端之间的通信安装

服务器

客户端

// 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 套接字:端口和存储地址

2. 服务器必须始终指定端口,因此客户端可以连接。 创建 调用有时还指定地址。 在客户端,请使用默认参数,请求 MFC 使用任何可用端口。

3. 其中 nPort 端口号和 strAddr 是计算机地址或 internet 协议 (IP) (ip) 地址。

4. MAC 地址可以采用多种形式:“ftp.microsoft.com”, “microsoft.com”。 IP 地址使用 “虚线的数字”窗体 “127.54.67.32”。 查看 连接 的功能测试该地址是否是一种虚线的数字 (尽管它不检查以确保该数字为网络上的有效的计算机)。 否则, 连接 假定一个设备名称的其他形式之一。

5. 当您对服务器端时的 接受 ,通过对新的套接字对象。 必须先构建此对象,但是,不调用它的 创建 。 记住,如果此套接字对象超出范围,连接将关闭。 MFC 连接到 套接字 处理的新对象。 可以使用套接字在堆栈,如显示,或者在堆。

6. ,且在超出范围时,存档和套接字文件已关闭。 ,当对象超出范围或删除时,套接字对象的析构函数或调用套接字对象的 关闭 成员函数。

有关序列的其他说明

序列上表中调用显示用于流套接字。 数据进行套接字,没有访问,不需要 CAsyncSocket::Connect侦听接受 调用 (尽管您可以选择使用 连接)。 相反,因此,如果您使用类 CAsyncSocket,数据进行套接字使用 CAsyncSocket::SendToReceiveFrom 成员函数。 (如果使用的数据进行套接字的 连接 ,请使用 发送接收。)由于 CArchive 不与数据运行时,不要使用与存档的 CSocket ,如果套接字是数据进行。

CSocketFile 不支持所有 entity_CODECFile 的函数; CFile 成员 (如 Seek,没有套接字通信的含义,不可用。 因此,某些默认 MFC Serialize 函数不是与 CSocketFile兼容。 这是尤其如此 CEditView 类。 不应尝试使用 CEditView::SerializeRaw附加到 CSocketFile 对象的 CArchive 对象序列化 CEditView 数据;使用 CEditView::Serialize (未文档)。 SerializeRaw 函数需要文件对象具有功能,例如 SeekCSocketFile 不支持。

有关更多信息,请参见:

请参见

参考

CSocket 类

CAsyncSocket::Create

CAsyncSocket::Close

概念

在MFC的Windows套接字