关于CSocket的发送数据问题,不太好说,请高手进来帮忙!
雨中的月儿 2008-01-28 11:31:36 目的描述:
(1)A机器开启server socket,负责监听,B机器开启connect socket,与A连接,A在OnAccept()函数中,构造新的socket用于通讯。
(2)B机器每隔100ms向A发送一串数据
实现描述:
(1)A中的server socket为: class CServerSocket : public CSocket
继承CSocket的OnAccept()函数用于建立新的连接
(2)B中的connect socket为: class CConnectSocket : public CSocket
其中使用CArchive和CSockeFile负责序列化通讯,
CSocketFile *m_sfSocketFile = new CSocketFile( this );
CArchive *m_aSessionIn = new CArchive(m_sfSocketFile, CArchive::load);
CArchive *m_aSessionOut = new CArchive(m_sfSocketFile, CArchive::store);
发送数据的函数SendNetMessage()实现部分为
CString sNetMsg = _T("XXXX");
sNetMsg.Serialize(*m_aSessionOut);
m_aSessionOut->Flush();
问题描述:
A机器可能由于网络原因或程序Debug Assertion错误,不正常退出,因此不能通过发送"Quit"的消息给B机器,告知连接断开。所以,B机器经常会弹出“试图写入不存在的文件”错误,我猜测是由于CSocketFile的错误,但不能具体分析出原因。
此外,再请问m_aSessionOut->Flush()是阻塞操作吧?
所以,请高手帮忙,如果解决这个问题,或者,改用其它类来完成这种错误处理。
多谢!