利用CArchive 进行网络传输的问题。高手请进

mrwws 2003-03-20 02:01:43
利用CArchive与csocket绑定进行进行网络传输。
服务器端的 OnReceive中的代码如下:

cTransObject.Serialize(*m_pInAr);

while(!(m_pInAr->IsBufferEmpty()))
{
cTransObject.Serialize(*m_pInAr);
}

当传输数据小的时候一切正常。
启动100个client与服务器连接。每个client每秒向服务器发送10个包,每个包的大小为1k,运行一段时间后,而server的OnReceive不再触发,client的发送包阻塞,
请问各位高手有什么解决办法吗??

...全文
29 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingzai 2003-03-20
  • 打赏
  • 举报
回复
RESOLUTION
Make sure there is data in the socket's buffer using CAsyncSocket::IOCtl() before attempting to receive.


void CMySocket::OnReceive(int nErrorCode)
{
// TODO: Do some error handling on nErrorCode

DWORD dwBytes;
VERIFY(IOCtl(FIONREAD, &dwBytes));
if (0 == dwBytes) // if nothing to read, return
return;

do
{

// Read your data from your CArchive object

CString strData;
m_pMyArchive >> strData;

} while(!m_pMyArchive->IsBufferEmpty());
}
for more details ,see KB articles
FIX: Using CSocket w/ CArchive Causes Block from Extra FD_READ
ID: Q138694


bluemeteor 2003-03-20
  • 打赏
  • 举报
回复
UP

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧