Windows套接字:操作的顺序
本文说明,并行,操作的顺序服务器套接字和客户端套接字的。由于套接字使用 CArchive 对象,则必须是 流套接字。
操作的顺序流存储的通信
到构造 CSocketFile 对象点,下面的顺序。 CAsyncSocket 和 CSocket是准确 (有几个参数区别)。此后,顺序是严格为 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::SendTo 和 ReceiveFrom 成员函数。(如果使用的数据进行套接字的 连接 ,请使用 发送 和 接收。)由于 CArchive 不与数据运行时,不要使用与存档的 CSocket ,如果套接字是数据进行。
CSocketFile 不支持所有 entity_CODECFile 的函数; CFile 成员 (如 Seek,没有套接字通信的含义,不可用。因此,某些默认 MFC Serialize 函数不是与 CSocketFile兼容。这是尤其如此 CEditView 类。不应尝试使用 CEditView::SerializeRaw附加到 CSocketFile 对象的 CArchive 对象序列化 CEditView 数据;使用 CEditView::Serialize (未文档)。SerializeRaw 函数需要文件对象具有功能,例如 Seek, CSocketFile 不支持。
有关更多信息,请参见: