进程间socket通信

服务端代码:

View Code
 1 #include <sys/un.h>
 2 #include <unistd.h>
 3 #include <iostream>
 4 #include <sys/socket.h>
 5 
 6 using std::cout;
 7 const int MAX_DATA_LEN = 255;
 8 
 9 int main(int argc, char** argv)
10 {
11     int server_sockfd = 0;
12     int client_sockfd = 0;
13     int server_len = 0;
14     int client_len = 0;
15     struct sockaddr_un server_addr;
16     struct sockaddr_un client_addr;
17     int result = 0;
18     
19 
20     unlink("server_socket");
21     server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
22     server_addr.sun_family = AF_UNIX;
23     strncpy(server_addr.sun_path, "server_socket", sizeof(server_addr.sun_path));
24     server_len = sizeof(server_addr);
25 
26     bind(server_sockfd, (struct sockaddr*)&server_addr, server_len);
27     listen(server_sockfd, 5);
28 
29     while(1)
30     {
31         char ch[MAX_DATA_LEN] = {0};
32         cout << "server waiting" << std::endl;
33         client_len = sizeof(client_addr);
34         client_sockfd = accept(server_sockfd, (struct sockaddr*)&client_addr, (socklen_t*)&client_len);
35 
36         read(client_sockfd, ch, MAX_DATA_LEN);
37         cout << "server receive is " << ch << std::endl;
38         strncpy(ch, "Hello, client!", MAX_DATA_LEN);
39         write(client_sockfd, ch, MAX_DATA_LEN);
40         close(client_sockfd);
41     }
42 
43     return 0;
44 }

客户端代码: 

View Code
 1 #include <sys/un.h>
 2 #include <unistd.h>
 3 #include <iostream>
 4 #include <sys/socket.h>
 5 #include <cstdlib>
 6 
 7 using namespace std;
 8 
 9 const int MAX_DATA_LEN = 255;
10 
11 int main(int argc, char** argv)
12 {
13     int sockfd = 0;
14     int len = 0;
15     struct sockaddr_un address;
16     int result = 0;
17     char ch[MAX_DATA_LEN] = "test";
18 
19     sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
20 
21     address.sun_family = AF_UNIX;
22     strncpy(address.sun_path, "server_socket", strlen("server_socket"));
23     len = sizeof(address);
24 
25     result = connect(sockfd, (struct sockaddr*)&address, len);
26     if (-1 == result)
27     {
28         cerr << "connect failed" << std::endl;
29         exit(EXIT_FAILURE);
30     }
31     cout << "connect server secceed." << std::endl;
32     write(sockfd, ch, MAX_DATA_LEN);
33     read(sockfd, ch, MAX_DATA_LEN);
34     cout << "char from server is " << ch << std::endl;
35     close(sockfd);
36     exit(EXIT_SUCCESS);
37 }

 

转载于:https://www.cnblogs.com/fixer/archive/2013/04/15/3022101.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值