UNIX域流式套接字一例

客户端:

   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;
  20:      char buffer[N];
  21:   
  22:      if(argc < 2)
  23:      {
  24:          printf("usage:%s <sock file>\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 <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, 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 <sock file>\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:  }

 

运行:

服务器:

image

客户端:

image

转载于:https://www.cnblogs.com/pengdonglin137/archive/2013/03/16/2963461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值