linux进程socket通信,linux进程间通信--socket套接字 实例代码

可以实现通信的代码实现,拿去用!

原文来自:http://blog.chinaunix.net/uid-26790551-id-3171897.html

服务器端:

#include

#include

#include

#include

#include

#include

#define UNIX_DOMAIN "/tmp/UNIX.domain"

int main(void)

{

int lsn_fd, apt_fd;

struct sockaddr_un srv_addr;

struct sockaddr_un clt_addr;

socklen_t clt_len;

int ret;

int i;

char recv_buf[1024];

char send_buf[1024];

//create socket to bind local IP and PORT

lsn_fd = socket(PF_UNIX, SOCK_STREAM, 0);

if(lsn_fd < 0)

{

perror("can't create communication socket!");

return 1;

}

//create local IP and PORT

srv_addr.sun_family = AF_UNIX;

strncpy(srv_addr.sun_path, UNIX_DOMAIN, sizeof(srv_addr.sun_path) - 1);

unlink(UNIX_DOMAIN);

//bind sockfd and sockaddr

ret = bind(lsn_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));

if(ret == -1)

{

perror("can't bind local sockaddr!");

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 1;

}

//listen lsn_fd, try listen 1

ret = listen(lsn_fd, 1);

if(ret == -1)

{

perror("can't listen client connect request");

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 1;

}

clt_len = sizeof(clt_addr);

while(1)

{

apt_fd = accept(lsn_fd, (struct sockaddr*)&clt_addr, &clt_len);

if(apt_fd < 0)

{

perror("can't listen client connect request");

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 1;

}

printf("received a connection\n");

printf("send message to client\n");

memset(send_buf, 0, 1024);

strcpy(send_buf, "Hello, you have connected to server succeed");

int snd_num = write(apt_fd, send_buf, 1024);

if(snd_num != 1024)

{

perror("send messge to client failed\n");

close(apt_fd);

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 1;

}

//read and printf client info

printf("============info=================\n");

for(i = 0; i < 4; i++)

{

memset(recv_buf, 0, 1024);

int rcv_num = read(apt_fd, recv_buf, sizeof(recv_buf));

printf("Message from client (%d) :%s\n", rcv_num, recv_buf);

}

}

close(apt_fd);

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 0;

}

客户端:

#include

#include

#include

#include

#include

#define UNIX_DOMAIN "/tmp/UNIX.domain"

int main(void)

{

int connect_fd;

struct sockaddr_un srv_addr;

char snd_buf[1024];

char rcv_buf[1024];

int ret;

int i;

//create client socket

connect_fd = socket(PF_UNIX, SOCK_STREAM, 0);

if(connect_fd < 0)

{

perror("client create socket failed");

return 1;

}

//set server sockaddr_un

srv_addr.sun_family = AF_UNIX;

strcpy(srv_addr.sun_path, UNIX_DOMAIN);

//connect to server

ret = connect(connect_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));

if(ret == -1)

{

perror("connect to server failed!");

close(connect_fd);

unlink(UNIX_DOMAIN);

return 1;

}

//receive message from server

memset(rcv_buf, 0, 1024);

int rcv_num = read(connect_fd, rcv_buf, sizeof(rcv_buf));

printf("receive message from server (%d) :%s\n", rcv_num, rcv_buf);

//printf("\n");

//send message to server

memset(snd_buf, 0, 1024);

strcpy(snd_buf, "message from client");

printf("sizeof(snd_buf): %d\n", sizeof(snd_buf));

sleep(2000);

//send message to server

for(i = 0; i < 4; i++)

{

write(connect_fd, snd_buf, sizeof(snd_buf));

}

close(connect_fd);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值