UNIX域用户数据报套接字一例

服务器端:

   1:  #include <stdio.h>
   2:  #include <stdlib.h>
   3:  #include <strings.h>
   4:  #include <sys/un.h>
   5:  #include <string.h>
   6:  #include <sys/socket.h>
   7:  #include <netinet/in.h>
   8:  #include <arpa/inet.h>
   9:  #include <unistd.h>
  10:   
  11:  typedef struct sockaddr SA;
  12:   
  13:  #define N 256
  14:   
  15:  int main(int argc, char *argv[])
  16:  {
  17:   
  18:      int listenfd;
  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 <sock file>\n",argv[0]);
  26:          exit(-1);
  27:      }
  28:   
  29:      if((listenfd = socket(PF_UNIX, SOCK_DGRAM, 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:      bzero(&peeraddr, peerlen); 
  48:   
  49:      while(1)
  50:      {
  51:          recvfrom(listenfd, buffer, N, 0, (SA *)&peeraddr, &peerlen);
  52:          
  53:          printf("receive from client [%s]> %s",peeraddr.sun_path, buffer); 
  54:          sendto(listenfd, buffer, N, 0, (SA *)&peeraddr, sizeof(peeraddr)); 
  55:      }
  56:   
  57:      return 0;
  58:  }

客户端:

   1:  #include <string.h>
   2:  #include <stdio.h>
   3:  #include <stdlib.h>
   4:  #include <strings.h>
   5:  #include <sys/un.h>
   6:  #include <sys/socket.h>
   7:  #include <netinet/in.h>
   8:  #include <arpa/inet.h>
   9:  #include <unistd.h>
  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,serveraddr;
  20:      char buffer[N];
  21:   
  22:      if(argc < 3)
  23:      {
  24:          printf("usage:%s <server sock> <client sock>\\n",argv[0]);
  25:          exit(-1);
  26:      }
  27:   
  28:      if((sockfd = socket(PF_UNIX, SOCK_DGRAM, 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[2]);
  38:   
  39:      unlink(argv[2]);
  40:      if(bind(sockfd, (SA *)&myaddr, sizeof(myaddr)) < 0)
  41:      {
  42:          perror("fail to bind");
  43:          exit(-1);
  44:      }
  45:   
  46:      
  47:      bzero(&serveraddr, sizeof(struct sockaddr_un));
  48:   
  49:      serveraddr.sun_family = PF_UNIX;
  50:      strcpy(serveraddr.sun_path, argv[1]);
  51:      
  52:      while(1)
  53:      {
  54:          
  55:          fgets(buffer, N ,stdin);
  56:          if(strncmp(buffer, "quit", 4) == 0)
  57:          {
  58:              break;
  59:          }
  60:   
  61:          sendto(sockfd, buffer, N, 0, (SA *)&serveraddr, sizeof(serveraddr));
  62:          bzero(buffer, N);
  63:          recvfrom(sockfd, buffer, N, 0, NULL, NULL);
  64:   
  65:          printf("receive from server: %s", buffer);
  66:      }
  67:   
  68:          close(sockfd);
  69:      return 0;
  70:  }

运行:

服务器:

image

客户端:

image

原文地址:https://www.cnblogs.com/pengdonglin137/p/2963459.html