服务端代码:
/* Server code in C */
//*
//*Date:2012-07-03
//*Author :CplusHua
//*服务端发送结构体数据
//*
//*
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main(void)
{
signal(SIGPIPE,SIG_IGN);
struct passwd
{
char pw_name[100]; // Username.
char pw_passwd[100]; // Password.
__uid_t pw_uid; // User ID.
__gid_t pw_gid; // Group ID.
char pw_gecos[100]; // Real name.
char pw_dir[100]; // Home directory.
char pw_shell[100]; // Shell program.
} ;
struct passwd p;
memset(&p,0x00,sizeof(struct passwd));
strcpy(p.pw_name,"testuserser");
strcpy(p.pw_passwd,"234234");
p.pw_gid=1000;
p.pw_uid=1012;
strcpy(p.pw_shell,"/usr/bin");
strcpy(p.pw_dir,"/home/");
char sendbuff[sizeof(struct passwd)];
memset(sendbuff,0,sizeof(sendbuff));
memcpy(sendbuff,&p,sizeof(struct passwd));
cout<
struct sockaddr_in stSockAddr;
int SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(-1 == SocketFD)
{
perror("can not create socket");
exit(EXIT_FAILURE);
}
memset(&stSockAddr, 0, sizeof(struct sockaddr_in));
stSockAddr.sin_family = AF_INET;
stSockAddr.sin_port = htons(5555);
stSockAddr.sin_addr.s_addr = INADDR_ANY;
if(-1 == bind(SocketFD,(const struct sockaddr *)&stSockAddr, sizeof(struct sockaddr_in)))
{
perror("error bind failed");
close(SocketFD);
exit(EXIT_FAILURE);
}
if(-1 == listen(SocketFD, 10))
{
perror("error listen failed");
close(SocketFD);
exit(EXIT_FAILURE);
}
cout<
for(;;)
{
int ConnectFD = accept(SocketFD, NULL, NULL);
if(0 > ConnectFD)
{
perror("error accept failed");
close(SocketFD);
exit(EXIT_FAILURE);
}
//注意此处的send的第一个参数是accept返回的描述
send(ConnectFD, &p, sizeof(p),0);
cout<
cout<
cout<
cout<
cout<
cout<
cout<
cout<
shutdown(ConnectFD, SHUT_RDWR);
close(ConnectFD);
}
close(SocketFD);
return 0;
}