######Socket接收的为什么与发送的信息有出入?######
我自己定义的数据包,去发送接收,为什么老出错,为了标识包,我为每个包加了一个标识IDMark;但是赋值是对的,接收怎么有时是对的,有时候是错误的呢
//代码简介如下
//自定义数据包,用来分批发送数据
struct PicDatePack
{
short IDMark; //消息头判断 默认为1001
short Kind; //操作类型,系统设置消息,键盘消息,鼠标消息
short Status; //当前状态,开始,中间,还是结束
int Addtion; //附加消息
char Date[2048];
};
//ClientSocket的写事件
PicDatePack SendMsg;
SendMsg.IDMark = M_HEAD;
SendMsg.Kind = M_BegRemoteControl;
...
memcpy(SendMsg.Date,buf,sendsize);
SendMsg.Addtion = 0;
ClientSocket->Socket->SendBuf(&SendMsg,sizeof(PicDatePack));//SendMsg));
//ServerSocket的读事件
void *buf;
buf = new unsigned char[sizeof(PicDatePack)];
int Length = Socket->ReceiveLength();
Socket->ReceiveBuf(buf,Length);//sizeof(PicDatePack));//
PicDatePack *curMsg = (struct PicDatePack*)buf;
if(curMsg->IDMark != M_HEAD)
{
//*****************按理说不应该执行到里面来,可是经常出现这种情况为什么******************
MessageDlg("不该出现的错误,头标识有误!", mtWarning, TMsgDlgButtons() << mbOK, 0);
return;
}
//然后根据PicDatePack传过来的Kind类型去做相应的操
//我发过来包还经常有键盘鼠标消息(远程控制),为什么接收消息处理时,程序经常自己就把自己关闭了,特别是双击操作时