3.3.2 使用CSocketFile类
在MFC中定义了一个在套接字编程(www.cppentry.com)中使用的CSocketFile类,可以充分发挥CSocket类的特性。CSocketFile类是CFile的派生类,主要用来在Windows Sockets编程(www.cppentry.com)中发送和接收序列化数据(如结构体数据)。通过把CSocketFile类对象、CArchive对象和CSocket创建的套接字对象联系起来,可以实现数据的加载(接收)和存储(发送)。
(1) 构造函数
在实际编程(www.cppentry.com)中,将CSocketFile对象和CSocket对象直接联系起来可以用CSocketFile类的构造函数来完成。CSocketFile类的构造函数原型如下:
- CSocketFile::CSocketFile(CSocket *pSocket, BOOL bArchiveCompatible=TRUE);
参数pSocket是一个CSocket对象;bArchiveCompatible指示该文件对象是否与一个CArchive对象一起使用,默认为true。该构造函数可以有两种调用方式。例如:- CSocket *m_clientsocket = new CSocket; //创建套接字
- //创建一个与m_clientsocket关联的文件指针对象
- CSocketFile *m_sockfile = new CSocketFile(&m_clientsocket);
在上述代码中,通过new关键字调用CSocketFile类的构造函数创建一个指针对象。第二种调用方式如下: - CSocket *m_clientsocket = new CSocket; //创建套接字
- CSocketFile m_sockfile(&m_clientsocket); //创建与m_clientsocket关联的文件对象
这两种调用方式都需要在实例化对象m_sockfile之后,再与CArchive对象相关联,并由CArchive对象指定其属性。具体代码如下:- CArchive ar(&m_sockfile,
- CArchive::load|CArchive::store); //创建m_sockfile相关联的串行化对象并指定属性
- ... //省略部分代码
- ar.Close(); //关闭串行化对象
在这里使用完串行化对象ar以后,需要使用函数CArchive::Close()关闭,以确保数据(命令)及时存储(发送)。
(2) CSocketFile与CFile
CSocketFile类虽然派生于CFile类,但是它却屏蔽掉了函数CFile::Open()。也就是说,用户在实际编程(www.cppentry.com)时,不能使用CSocketFile对象直接去调用函数Open()打开文件。
因为本章实例中的文件的操作大多是由CArchive类实现的,所以关于CSocketFile类的其他函数请读者参阅MSDN,这里不再赘述。