使用CSocket、CSocketFile及CArchive组合接收不到数据的一种原因

这几天在做网络编程,发现一个问题

客户端使用CSocket、CSocketFile及CArchive组合,

关键代码如下:

void CClientSock::init(CClientDlg* pdlgClient)
{
m_pdlgClient=pdlgClient;
m_psockFile=new CSocketFile(this,TRUE);
m_parInput=new CArchive(m_psockFile,CArchive::load);//外部传输到本机的数据,可从套接字中读出数据,
m_parOutput=new CArchive(m_psockFile,CArchive::store);//传输至套接字数据,从套接字中写入数据,
//m_bIsInit=TRUE;//初始化成功


}
void CClientSock::OnReceive(int nErrorCode) 
{
// TODO: Add your specialized code here and/or call the base class

CSocket::OnReceive(nErrorCode);

CString msg;

CString recvStr;
do 
{

(*m_parInput)>>msg;
recvStr+=msg;
} while (m_parInput->IsBufferEmpty());
//AfxMessageBox(recvStr,MB_OK);
}

代码中(*m_parInput)>>msg这句在服务器端发送数据时,一直卡着,无法执行下去,但是用CSocket中的成员函数recvive是可正常接收数据的。

经过各种折腾,最终发现:

1、客户端与服务器端都用CSocket、CSocketFile及CArchive组合时发送接收数据时,通信可以正常收发数据

2、服务器直接调用成员函数send()发送数据,而客户端用CSocket、CSocketFile及CArchive组合接收数据时,就会在receive处卡主,执行不下去。

希望对玩CSocket的同志有用。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值