阻塞方式下数据传输接收的问题
我用线程阻塞方式传输数据,客户端代码如:
WskStream->Write(m_sUserName.c_str(),m_sUserName.Length());
WskStream->Write(m_sProjCode.c_str(),m_sProjCode.Length());
WskStream->Write(m_sProjName.c_str(),m_sProjName.Length());
if(!WskStream->WaitForData(TimeOut))
{
Msg("连接服务器超时.");
delete WskStream;
ClientSocket1->Active=false;
::Sleep(500);
return;
}
iRtn=WskStream->Read(FlagBuf,FLAG_BUF_SIZE);
memcpy(Flag,FlagBuf,iRtn);
if(strcmpi(Flag,sBack)!=0)
{
Msg("服务器响应错误.");
delete WskStream;
ClientSocket1->Active=false;
::Sleep(500);
return;
}
服务端代码如:
if(WskStream->WaitForData(TimeOut))
{
iRtn=WskStream->Read(FlagBuf,FLAG_BUF_SIZE);
memcpy(sUserName,FlagBuf,iRtn);
}
if(WskStream->WaitForData(TimeOut))
{
iRtn=WskStream->Read(FlagBuf,FLAG_BUF_SIZE);
memcpy(sProjCode,FlagBuf,iRtn);//在此发觉接收了客户端第二第三步发送的数据
}
if(WskStream->WaitForData(TimeOut))
{
iRtn=WskStream->Read(FlagBuf,FLAG_BUF_SIZE);
memcpy(sProjName,FlagBuf,iRtn);//到这里后可能就接收不到客户端第三步发送的数据了,就塞在这里,而客户端需要下面的OK回应,可得不到,客户端就超时了,这种情况为什么会发生?应该怎样解决呀。
}
WskStream->Write("OK\0",3);