博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX域流式套接字一例
阅读量:6998 次
发布时间:2019-06-27

本文共 3246 字,大约阅读时间需要 10 分钟。

客户端:

1:  #include 
2:  #include 
3:  #include 
4:  #include 
5:  #include 
6:  #include 
7:  #include 
8:  #include 
9:  #include 
10:   
11:  typedef struct sockaddr SA;
12:   
13:  #define N 256
14:   
15:  int main(int argc, char *argv[])
16:  {
17:   
18:      int sockfd;
19:      struct sockaddr_un myaddr;
20:      char buffer[N];
21:   
22:      if(argc < 2)
23:      {
24:          printf("usage:%s 
\n",argv[0]);
25:          exit(-1);
26:      }
27:   
28:      if((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
29:      {
30:          perror("fail to socket");
31:          exit(-1);
32:      }
33:   
34:      bzero(&myaddr, sizeof(struct sockaddr_un));
35:   
36:      myaddr.sun_family = PF_UNIX;
37:      strcpy(myaddr.sun_path, argv[1]);
38:
39:      if(connect(sockfd, (SA *)&myaddr, sizeof(myaddr)) < 0)
40:      {
41:          perror("fail to connect");
42:          exit(-1);
43:      }
44:   
45:   
46:      while(1)
47:      {
48:
49:          fgets(buffer, N ,stdin);
50:          if(strncmp(buffer, "quit", 4) == 0)
51:          {
52:              break;
53:          }
54:   
55:          send(sockfd, buffer, N, 0);
56:          bzero(buffer, N);
57:          recv(sockfd, buffer, N, 0);
58:   
59:          printf("receive from server: %s", buffer);
60:      }
61:   
62:          close(sockfd);
63:      return 0;
64:  }

 

服务器端:

1:  #include 
2:  #include 
3:  #include 
4:  #include 
5:  #include 
6:  #include 
7:  #include 
8:  #include 
9:  #include 
10:   
11:  typedef struct sockaddr SA;
12:   
13:  #define N 256
14:   
15:  int main(int argc, char *argv[])
16:  {
17:   
18:      int listenfd, confd;
19:      struct sockaddr_un myaddr, peeraddr;
20:      socklen_t peerlen = sizeof(peeraddr);
21:      char buffer[N];
22:   
23:      if(argc < 2)
24:      {
25:          printf("usage:%s 
\n",argv[0]);
26:          exit(-1);
27:      }
28:   
29:      if((listenfd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
30:      {
31:          perror("fail to socket");
32:          exit(-1);
33:      }
34:   
35:      bzero(&myaddr, sizeof(struct sockaddr_un));
36:   
37:      myaddr.sun_family = PF_UNIX;
38:      strcpy(myaddr.sun_path, argv[1]);
39:   
40:      remove(argv[1]);
41:      if(bind(listenfd, (SA *)&myaddr, sizeof(myaddr)) < 0)
42:      {
43:          perror("fail to bind");
44:          exit(-1);
45:      }
46:   
47:      if(listen(listenfd, 5) < 0)
48:      {
49:          perror("fail to listen");
50:          exit(-1);
51:      }
52:
53:      bzero(&peeraddr, peerlen);
54:   
55:      while(1)
56:      {
57:          if((confd = accept(listenfd, (SA *)&peeraddr, &peerlen)) < 0)
58:          {
59:              perror("fail to accept");
60:              exit(-1);
61:          }
62:
63:          printf("connetion from [%s]\n",peeraddr.sun_path);
64:   
65:          while(recv(confd, buffer, N, 0) > 0)
66:          {
67:              printf("receive from client > %s", buffer);
68:   
69:              send(confd, buffer, N, 0);
70:          }
71:
72:          printf("connetion has closed\n");
73:
74:          close(confd);
75:
76:      }
77:   
78:      return 0;
79:  }

 

运行:

服务器:

客户端:

转载地址:http://gpavl.baihongyu.com/

你可能感兴趣的文章