关于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()不会返回 除非有数据读
发送端:****(){
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()不会返回 除非有数据读