• 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

  • 相关阅读:
    项目代码风格要求
    命名规范
    五招四十二式
    PMBok项目管理
    敏捷软件开发要点
    设计一种前端数据延迟加载的jQuery插件(2)
    为什么Java byte 类型的取值范围是-128~127 (转)
    Xcode编译时出现cannot run using the selected device提示
    mac下的常用操作
    iOS用AVAudioPlayer播放m4a音频
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/2963461.html
Copyright © 2020-2023  润新知