linux的socket接收的内容,Linux C Socket发送接收结构体数据

该博客介绍了一段C语言代码,用于创建一个TCP服务器,该服务器监听5555端口并发送一个包含用户名、密码、用户ID等信息的结构体数据给客户端。服务器忽略SIGPIPE信号,并在接收到连接请求后,将结构体数据发送给客户端,然后关闭连接。
摘要由CSDN通过智能技术生成

服务端代码:

/* 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值