用socket发送结构,如何还原
client:
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <winsock2.h>
typedef struct{
char arcPrefix[9];
char cComma1;
char arcPhone[11];
char cComma2;
char arcPortNum[11];
char cComma3;
char arcMsg[140];
}GameRecvPacket;
using namespace std;
#define IP_Port 5003
#define IP_Addr TEXT("192.168.0.1")
#define MAX_MESSAGE_LENGTH 1024
int main(int argc,char *argv[]){
SOCKET sclient;
struct sockaddr_in server;
int namelen,pklen;
int status,ret;
char buf[MAX_MESSAGE_LENGTH];
WSADATA wsd;
GameRecvPacket RecvPtr;
if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0){
perror("wsastartup() failed:");
system("pause");
return 0;
}
if((sclient=socket(AF_INET,SOCK_STREAM,0))< 0){
perror("socket failed :");
system("pause");
return 0;
}
ZeroMemory(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(IP_Port);
server.sin_addr.s_addr=inet_addr(IP_Addr);
if(connect(sclient,(struct sockaddr *)&server,sizeof(server))<0){
perror("connect() failed :");
printf("%d\n",WSAGetLastError());
system("pause");
return 0;
}
namelen=sizeof(sclient);
for(ret=0;ret<10;ret++){
strcpy(RecvPtr.arcPrefix, "receive ");
RecvPtr.cComma1 = ',';
strcpy(RecvPtr.arcPhone, "3343232");
RecvPtr.cComma2 = ',';
strcpy(RecvPtr.arcPortNum, "5503 ");
RecvPtr.cComma3 = ',';
strcpy(RecvPtr.arcMsg, "hello");
send(sclient, (char *)&RecvPtr, sizeof(GameRecvPacket), 0);
printf("send() context -> '%s'\n", (char *)&RecvPtr);
if((pklen=recv(sclient,buf,sizeof(buf),0))<0){
perror("recv() failed:");
break;
}else if(pklen==0){
printf("recv():return FAILED,connected is shut down\n");
break;
}else{
printf("the pktlen is %d\n",pklen);
printf("recv():return success\npacket length=%d and the context is %s\n", pklen, buf);
}
Sleep(10);
}
closesocket(sclient);
WSACleanup();
printf("server ended successfully\n");
system("pause");
return 0;
}