Linux c++(socket网络通信 & 本地套接字通讯)

server

#include <stdio.h>                                                                       
  #include <unistd.h>
  #include <stdlib.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <string.h>
  #include <arpa/inet.h>
  #include <sys/un.h>
      
✹ int main(int argc, char *argv[])
  {   
      int lfd = socket(AF_LOCAL,SOCK_STREAM,0);
      if(lfd == -1)
      {
          perror("sock error");
          exit(1);
      }
      // 绑定
      struct sockaddr_un serv;
      serv.sun_family = AF_LOCAL;
      strcpy(serv.sun_path,"server.sock");
      int ret = bind(lfd,(struct sockaddr*)&serv,sizeof(serv));
      if(ret == -1)
      {
       perror("bind error");
       exit(1);
      }
      // 监听
      ret =  listen(lfd,36);
      if(ret == -1)
      {
       perror("listen error");
       exit(1);
      }
      // 等待接收链接请求
      struct sockaddr_un client;
      socklen_t len = sizeof(client);
      int cfd = accept(lfd,(struct sockaddr*)&client,&len);
      printf("client bind file: %s\n",client.sun_path);
      if(cfd == -1)
      {
       perror("accept error");
       exit(1);
      }
      //通信
      while(1)
      {
         char buf[1024] = {0}; 
         int recvlen = recv(cfd,buf,sizeof(buf),0);
         if(recvlen == -1)
         {
          perror("recv error");
          exit(1);
         }else if(recvlen == 0)
         {
             printf("client disconnect ......\n");
             close(cfd);
             break;
         }else{
             printf("recv buf: %s\n",buf);
             send(cfd,buf,recvlen,0);
         }
      }
      close(cfd);
      close(lfd);
      
      return 0;
  }     

client

#include <stdio.h>
  #include <unistd.h>                                                                      
  #include <stdlib.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <string.h>
  #include <arpa/inet.h>
  #include <sys/un.h>
     
✹ int main(int argc, char *argv[])              
  {  
     int fd = socket(AF_LOCAL,SOCK_STREAM,0);
     if(fd == -1)
     {
      perror("socket error");
      exit(1); 
     }   
     // ========================================
     // 给客户端绑定一个套接字文件
     struct sockaddr_un client;
     client.sun_family = AF_LOCAL;
     strcpy(client.sun_path,"client.sock");
     int ret = bind(fd,(struct sockaddr*)&client,sizeof(client));
     if(ret == -1)
     {
      perror("bind error");
      exit(1);
     }
     // 初始化server信息
    struct sockaddr_un server;
    server.sun_family = AF_LOCAL;
    strcpy(server.sun_path,"server.sock");
     // 链接服务器
    connect(fd,(struct sockaddr*)&server,sizeof(server));
        
    //通信
    while(1)
    {
        char buf[1024] = {0};
        fgets(buf,sizeof(buf),stdin);
        send(fd,buf,strlen(buf)+1,0);
    
        // 接收数据
        recv(fd,buf,sizeof(buf),0);
        printf("recv buf: %s\n",buf);
    }
      return 0;
  } 

posted on 2021-05-10 15:49  lodger47  阅读(390)  评论(0)    收藏  举报

导航