关于udp的三次握手实现,该如何处理

关于udp的三次握手实现
小弟想用c++实现udp协议的三次握手过程,现在出现了一些问题,在第三次握手的时候,即客户端校验客户端回复的ack以及服务器端的随机数时,recvfrom的返回值正确,但是ShakingMessage3里面的东西却读不出来,请大侠们帮帮忙。谢谢。





服务器端:

bool UdpStart::ShakeHands()
{
CCSDef::TMSG_HEADER *pMesgHeader=NULL;
CCSDef::TMSG_SHAKINGHANDS ShakingMessage;     //mine shakinmessage ,firstnumer is client random, secondnumber is server random
int firstnumber=random();
cout<<"random"<<endl;
ShakingMessage.SecondNumber=firstnumber;
SOCKADDR_IN from;
char buffer[1024]="\0";  
int fromlen=sizeof(from);
printf("waiting for message from others-------------\n"); 
if (recvfrom(s,buffer,sizeof(buffer) ,0,(LPSOCKADDR)&from,&fromlen)!=SOCKET_ERROR) 
{  
printf("received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);
}
pMesgHeader=(CCSDef::TMSG_HEADER*)buffer;
CCSDef::TMSG_SHAKINGHANDS *ShakingMessage2=(CCSDef::TMSG_SHAKINGHANDS*)pMesgHeader;
ShakingMessage.FirstNumber=ShakingMessage2->FirstNumber;
ShakingMessage.Result=ACK;
int ret=0;
ret=sendto(s,(char *)(&ShakingMessage),sizeof(CCSDef::TMSG_SHAKINGHANDS),0,(LPSOCKADDR)&from,sizeof(from));
if(ret>0)
{
cout<<"date has been send"<<endl;
}

char buffer2[1024]="\0";  
SOCKADDR_IN from2;
int fromlen2=sizeof(from2);
ret=recvfrom(s,buffer2,sizeof(buffer2) ,0,(LPSOCKADDR)&from2,&fromlen2);
CCSDef::TMSG_HEADER *pMesgHeader2=NULL;
pMesgHeader2=(CCSDef::TMSG_HEADER*)buffer2;
CCSDef::TMSG_SHAKINGHANDS *ShakingMessage3=(CCSDef::TMSG_SHAKINGHANDS*)pMesgHeader2;
if((ShakingMessage3->SecondNumber==ShakingMessage.SecondNumber)&&(ShakingMessage3->Result==ACK))
{
cout<<"three way hand shake complite"<<endl;
return true;
}
else
{
cout<<"three way hand shake file"<<endl;
return false;
}
}

客户端:

CCSDef::TMSG_HEADER *pMsgHeader=NULL;

CCSDef::TMSG_SHAKINGHANDS ShakingMessage;

int firstnumber=random();

cout<<"random1!!!"<<endl;

cout<<firstnumber<<endl;

ShakingMessage.FirstNumber=firstnumber;

int addrlen=sizeof(sa_in);

int ret=0;

int ref=0;

ret = sendto(s, (char*)(&ShakingMessage), sizeof(CCSDef::TMSG_SHAKINGHANDS),0,(LPSOCKADDR)&sa_in,addrlen);//数据发送函数,注意全部的参数都是[in]

if(ret>0)

cout<<"DATA HAS BEEN SENT..."<<endl;

//while(ref<=0)

//{

recvfrom(s,szbuffer,MAX_PACKET_SIZE + 1,0,(LPSOCKADDR)&sa_in,&addrlen);//数据接受函数,参数5为[out],参数6为[in/out]

//}

pMsgHeader=(CCSDef::TMSG_HEADER*)szbuffer;

CCSDef::TMSG_SHAKINGHANDS *ShakingMessage2=(CCSDef::TMSG_SHAKINGHANDS*)pMsgHeader;

if(ShakingMessage2->FirstNumber==firstnumber && ret>0 && ShakingMessage2->Result==ACK){

ShakingMessage2->Result=ACK;

cout<<ShakingMessage2->FirstNumber<<endl;

cout<<ShakingMessage2->SecondNumber<<endl;

ret = sendto(s,(char*)(&ShakingMessage2), sizeof(CCSDef::TMSG_SHAKINGHANDS),0,(LPSOCKADDR)&sa_in,addrlen);

cout<<ret<<endl;

}

else

{

cout<<"ERROR! NO RESPOND!"<<endl;

system("pause");

}

if(s!=NULL){

closesocket(s);//关闭套接字 之后要注释掉!!!!!!!!!!!

}

cout<<"Fuck Successful!"<<endl;

system("pause");

return true;

------解决方案--------------------
#progma pack (1) 
google下就知道了,
既然收到了,你这个问题要不就是字节对齐问题,要不就是你自己的代码逻辑出现了问题,
udp有最大包限制,你这个程序估计也碰不到。

仔细检查发送端发的内容是不是你想发的。