SOCKET发送结构体有关问题

SOCKET发送结构体问题
现有代码如下
服务端:
#include <WinSock2.h>
#include <stdio.h>
#include <string.h>

//数据包包头
typedef struct _tag_M2M_HEAD
{
int size; // 数据报的长度
int cmdid; // 命令码
int seqid; // 流水号
int versionnum; // 版本号
char SecurityID; // 安全标识
char ReserveWord; // 保留字
int terminalID; // 终端序列号

}M2M_HEAD;

//数据包
typedef struct _tag_M2M_PACKAGE
{
M2M_HEAD head; // 数据报的包头

//数据包包体
char data[100]; // 要发送的数据
int n; // 重发次数,初始值3
time_t t; //time_t表示有符号64位整数数据类型  下次发送的时间

} M2M_PACKAGE;

int initsocket()
{
WORD wVersionRequested;
WSADATA wsaData;
int nRes = 0;
SOCKET sockSvr;
int nErrCode = 0;
int bExit = 0;
SOCKADDR_IN addrSrv;


wVersionRequested = MAKEWORD(1, 1);

nRes = WSAStartup(wVersionRequested, &wsaData);
if (0 != nRes)
{
printf("err code:%d", WSAGetLastError());
return 0;
}

if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
printf("VERSION DIFF");
WSACleanup();
return 0;
}

sockSvr = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockSvr)
{
printf("err code:%d", WSAGetLastError());
return 0;
}

addrSrv.sin_family = AF_INET;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_port = htons(6000);

nRes = bind(sockSvr, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

while (!bExit)
{
SOCKADDR_IN sockCli;
char buf[1024] = {0};
M2M_PACKAGE pag;
int nLen = sizeof(SOCKADDR_IN);
int nRes;

recvfrom(sockSvr, buf, 1024, 0, (SOCKADDR*)&sockCli, &nLen);

memset(&pag, 0, sizeof(M2M_PACKAGE));
memcpy(&pag, buf, sizeof(M2M_PACKAGE));

printf("%s\n", buf);

}

closesocket(sockSvr);
return 0;
}

int main()
{
initsocket();
return 1;
}




客户端:
#include <WinSock2.h>
#include <stdio.h>

SOCKADDR_IN addrSrv;
SOCKET sockSvr;
SOCKADDR_IN sockCli;

//数据包包头
typedef struct _tag_M2M_HEAD
{
int size; // 数据报的长度
int cmdid; // 命令码
int seqid; // 流水号
int versionnum; // 版本号
char SecurityID; // 安全标识
char ReserveWord; // 保留字
int terminalID; // 终端序列号

}M2M_HEAD;

//数据包
typedef struct _tag_M2M_PACKAGE
{
M2M_HEAD head; // 数据报的包头

//数据包包体
char data[100]; // 要发送的数据
int n; // 重发次数,初始值3
time_t t; //time_t表示有符号64位整数数据类型  下次发送的时间

} M2M_PACKAGE;

//绑定ip地址和端口号
int InitCliSocket(char *ipAdress, int port)
{
WORD wVersionRequested;
WSADATA wsaData;
int nRes = 0;
int nErrCode = 0;
int bExit = 0;

wVersionRequested = MAKEWORD(1, 1);

nRes = WSAStartup(wVersionRequested, &wsaData);
if (0 != nRes)
{
printf("err code:%d", WSAGetLastError());