TCP协议传输结构体问题
server 端
=====================
// struct_server.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
BOOL InitWinsock();
struct test1
{
char title[50];
int type;
};
void main()
{
InitWinsock();
SOCKET socketserv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN addr_serv;
addr_serv.sin_family =AF_INET;
addr_serv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addr_serv.sin_port=htons(6000);
if(bind(socketserv,(SOCKADDR*)&addr_serv,sizeof(addr_serv))== SOCKET_ERROR)
{
printf("binding failed!");
return ;
}
printf ("waiting for client to connect....\n");
if(listen(socketserv,5)== SOCKET_ERROR)
{
printf("listening failed!");
return ;
}
SOCKADDR_IN clientsocket;
int len=sizeof(clientsocket);
SOCKET serConn = accept(socketserv,(SOCKADDR*)&clientsocket,&len);
struct test1 t1;
//t1.title ="go to hell";
//t1.type =2;
// test.name="the angel of god!" ;
// strcpy(test.name,"the angel of god");
char recvBuf[1024];
//send(serConn,(char*)&t1,sizeof(t1),0);
recv(serConn,recvBuf,1024,0);
memcpy(&t1,recvBuf,sizeof(recvBuf));
printf("start to receive!\n");
printf("title is %s, type is %d\n",t1.title,t1.type);
// recv(serConn,recvBuf,1024,0);
//recv(clientSocket,recvBuf,1024,0);
/// memcpy(&t1,recvBuf,sizeof(recvBuf));
}
BOOL InitWinsock()
{
int Error;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);
Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
if(Error!=0)
{
return FALSE;
}
else
{
if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
{
WSACleanup();
return FALSE;
}
}
return TRUE;
}
Client 端
// struct_client.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
BOOL InitWinsock();
struct str_title1
{
char title[50];
int type;
}t1={"silk silk silk",2};
void main()
{
InitWinsock();
SOCKET clientSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN clientsock_in;
clientsock_in.sin_family=AF_INET;
clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
clientsock_in.sin_port =htons(6000);
char recvBuf[1024];
if(connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(clientsock_in))==1)
{
printf("connecting failed!");
return ;
}printf("connection created!\n");
//str_title1 t1;
send(clientSocket,(char*)&t1,sizeof(t1),0);
//recv(clientSocket,recvBuf,1024,0);
//memcpy(&t1,recvBuf,sizeof(recvBuf));
//printf("title is %s, type is %d",t1.title,t1.type);
}
BOOL InitWinsock()
{
int Error;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);
Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
if(Error!=0)
{
return FALSE;
}
else
{
if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
{
WSACleanup();
return FALSE;
}
}
return TRUE;
}
出现读取错误..................
然后我把客服端和服务端换了下
server side
// struct_server.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
BOOL InitWinsock();
struct test1
{
char name[50];
int id;
}t1={"son of god!!!",1};
void main()
{
InitWinsock();
SOCKET socketserv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN addr_serv;
addr_serv.sin_family =AF_INET;
addr_serv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addr_serv.sin_port=htons(6000);
if(bind(socketserv,(SOCKADDR*)&addr_serv,sizeof(addr_serv))== SOCKET_ERROR)
{
printf("binding failed!");
return ;
}
printf ("waiting for client to connect....\n");
if(listen(socketserv,5)== SOCKET_ERROR)
{
printf("listening failed!");
return ;
}
SOCKADDR_IN clientsocket;
int len=sizeof(clientsocket);
SOCKET serConn = accept(socketserv,(SOCKADDR*)&clientsocket,&len);
char recvBuf[1024];
send(serConn,(char*)&t1,sizeof(t1),0);
printf ("sending data finished");
}
BOOL InitWinsock()
{
int Error;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);
Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
if(Error!=0)
{
return FALSE;
}
else
{
if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
{
WSACleanup();
return FALSE;
}
}
return TRUE;
}
client side
// struct_client.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
BOOL InitWinsock();
struct str_title1
{
char title[50];
int type;
};
void main()
{
InitWinsock();
SOCKET clientSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN clientsock_in;
clientsock_in.sin_family=AF_INET;
clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
clientsock_in.sin_port =htons(6000);
char recvBuf[1024];
if(connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(clientsock_in))==1)
{
printf("connecting failed!");
return ;
}printf("connection created!\n");
str_title1 t1;
recv(clientSocket,recvBuf,1024,0);
memcpy(&t1,recvBuf,sizeof(recvBuf));
printf("title is %s, type is %d",t1.title,t1.type);
}
BOOL InitWinsock()
{
int Error;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);
Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
if(Error!=0)
{
return FALSE;
}
else
{
if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
{
WSACleanup();
return FALSE;
}
}
return TRUE;
}
这样传输就没有问题
请问 是哪里出现错误....?