zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    NFC Basics(基本NFC)——翻译自developer.android.com
    【LeetCode】Sort Colors 解题报告
    发送手机物理标识请求
    Java编程介绍
    emacs 中使用git diff命令行
    OpenJudge百炼习题解答(C++)--题4074:积水量
    编程之美2.9 斐波那契数列
    Application Architecture Determines Application Performance
    程序包javax.servlet.annotation不存在
    mysql 严格模式 Strict Mode说明
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/2963459.html
Copyright © 2011-2022 走看看