关于Socket有关问题,Send/Receive

关于Socket问题,Send/Receive
发送端:****(){
  Header head;//一个简单的结构体
head.type=LOGIN_OUT;
head.len=loginDlg.m_strName.GetLength();
m_pSocket->Send((char*)&head,sizeof(head));//头消息
  .............
  strcpy(str,loginDlg.m_strName)
  m_pSocket->Send((char*)&str,sizeof(str));//消息
}
接收端OnReceive(){
  char buff1[sizeof(Header)];
  Receive(buff1,sizeof(buff1));//接受头消息
Header* header=(Header*)buff1;
int len=header->len;
char type=header->type;
if (type==LOGIN_OUT){
  char buff[RECV_LEN];//RECV_LEN为一个常量
memset(buff,0,sizeof(buff));
Receive(buff,sizeof(buff));//接收消息
  }
  if(type==....){
  ..........
  Receive(buff,sizeof(buff));//接收消息
  .................
  }
}
我想问:发送端一次发送两个消息,接收端第一个Receive接受头消息后,为什么不接收另外一个消息.不是每次有消息到来都触发OnReceive()函数吗?那么第一个Send和第二个Send()不都是由OnReceive()里的第一个Receive()接受?

------解决方案--------------------
阻塞模式下 第二个Receive()不会返回 除非有数据读