客户端
CSocket sockRecv;
sockRecv.Create();
while(!sockRecv.Connect(dlg->m_ipaddr,4040))
{
if(bStop)
{
sockRecv.Close();
return -1;
}
Sleep(50);
}

//判断文件是否被占用,等待打开
while(bOpen)
{
Sleep(500);
}
bOpen=TRUE;
//接收车牌号
DWORD dwTemp=0;
dwTemp=0;
sockRecv.AsyncSelect(0);
sockRecv.IOCtl(FIONBIO,&dwTemp);//变为阻塞方式
char Num[16]={0};
sockRecv.Receive(Num,sizeof(Num));服务端
CSocket sockTemp;
CString str,str1;
sockTemp.Create(4040);
sockTemp.Listen();
CSocket sockSend;
bRead=FALSE;
sockTemp.Accept(sockSend);
BOOL bSend;
while(bOpen)
{
Sleep(500);
}
bOpen=TRUE;
//发送车牌号码
DWORD dwTemp=0;
BOOL bTest =sockSend.AsyncSelect(0);//由于CSocket实际是异步,将它变为同步(阻塞)方式。
sockSend.IOCtl( FIONBIO, &dwTemp);//用IOCtl要将AsyncSelect的第一个参数为0,参看MSDN
char* num=dlg->m_strCarNum.GetBuffer(0);
sockSend.Send(num,16);程序在客户端接收那里就死了,怎么解决呢?

解决方案 »

  1.   

    你把SOCKET设置成阻塞式,当然会停在接收那里呀,只有收到数据才会往下走
      

  2.   

    最好不要用CSocket,如果要用它,你最好添加OnReceive消息响应,在这个响应函数中再调用Receive函数,如果直接调用Receive,如果没有数据,会出错
      

  3.   

    BOOL bSend;
        while(bOpen)
        {
            Sleep(500);
        }你这个循环,你认为在什么情况下会结束呢,  死循环了都.