CSocketFile::CSocketFile

CSocketFile( CSocket* pSocket, BOOL bArchiveCompatible = TRUE );

参数:
pSocket连接到CSocketFile对象的插槽。
bArchiveCompatible指示该文件对象是否与一个CArchive对象一起使用。只有当你希望在单机方式下来使用这个CSocketFile对象时,才传递FALSE。这种方式就象单机的CFile对象,具有一定的限制。这个标志将改变与CSocketFile对象连接的CArchive对象管理读缓冲区的方式。

说明:
此成员函数用来构造一个CSocketFile对象。当此对象超出范围或被删除时,它的析构函数将使它自己从插槽对象上分离。
注意:一个CSocketFile对象也可以在没有CArchive对象的情况下作为一个(受限制)的文件来使用。缺省的,CSocketFile构造函数的bArchiveCompatible参数是TRUE。这表明此文件对象是与一个档案一起使用的。要在没有档案的情况下使用这个文件对象,给bArchiveCompatible参数传递FALSE。
在“档案兼容”模式下,一个CSocketFile对象可以提供更好的表现,并减少出现“死锁”的危险。当两个发送和接收插槽相互等待时,或是同时等待一个公用的资源时,就会发生死锁。如果与CSocketFile对象一起工作的CArchive对象按它与CFile对象一起工作的方式来工作时,这种情况就会发生。在与CFile一起工作时,档案可以假定如果它接收到的字节少于它所请求的,则文件已经到达文件结尾了。
但是,在使用CSocketFile工作时,数据是基于消息的;缓冲区可以保存多条消息,因此收到比所请求的要少的字节数并不表示到达了文件结尾。在这种情况下,应用程序不会象使用CFile时那样阻塞,它可以继续从缓冲区中读取数据,直到缓冲区为空。在这种情况下,CArchive::IsBufferEmpty用于监视档案的缓冲区的状态是很有用的。

请参阅:CFile::CFile, CFile::Read