评论

收藏

[C++] #yyds干货盘点#网络编程简单demo记录

编程语言 编程语言 发布于:2021-12-12 13:55 | 阅读数:275 | 评论:0

网络编程
server
网络编程头文件
/*
/*  int socket(int domain, int type, int protocol) 需要的头文件  eg:  int sockfd = socket(AF_INET, SOCK_STREAM, 0);        ↓       ↓     ↓        ipv4协议  流式套接字  具体类型协议*/#include <sys/types.h>     #include <sys/socket.h>/*  inet_aton,  inet_addr,  inet_network, inet_ntoa,  inet_makeaddr, inet_lnaof, inet_netof接口需要的头文件*/#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>



server网络编程流程

  • 创建socket
  • 绑定信息(bind)
  • 设置监听队列(listen)
  • 接受连接(建立TCP连接)(accpet)
  • 创建socket
    //创建socketint sockfd = socket(AF_INET, SOCK_STREAM, 0);   //(ipv4协议,流式套接字,具体的协议类型)if(-1 == sockfd){  perror("socket");  exit(1);}/*  setsockopt设置SO_REUSEADDR。  socket关闭之后并不会立即收回,而是要经历一个TIME_WAIT的阶段。windows下最多可以达到4分钟。  所以在这个时候对这个端口进行重新绑定就会出错。所以需要先设置 SO_REUSEADDR.  或者在closesocket的时候,使用setsockopt设置SO_DONTLINGER。也不会有TIME_WAIT的阶段.  通常使用这个设置来加强网络程序的健壮性。*/int opt = 1;setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));  //地址可以被重复绑定struct sockaddr_in server_addr; //保存服务器的消息memset(&server,0,sizeof(server_addr));server_addr.sin_family = AF_INET;   //协议族server_addr.sin_port = 8000;    //端口server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");   //地址  INADDR_ANY->所有地址
  • 绑定信息
    int ret = bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));if(-1 == ret){  perror("bind");  exit(1);}
  • 设置监听队列
    ret = listen(sockfd, 10);if(-1 == ret){  perror("listen");  exit(1);}
  • 接受连接(建立TCP连接)
    printf("等待客户端连接");struct sockaddr_in client_addr; //用于保存客户端消息int length = sizeof(client_addr);int fd = accept(sockfd, (struct sockaddr *)&client_addr, &length);if(-1 == fd){  perror("accpet");  exit(1);}
  • 读取消息
    char buf[32] = 0;while(1){  ret = recv(fd, buf, sizeof(buf), 0);  if(-1 == fd){    perror("recv");    exit(1);  }  printf("客户端接受的消息为:");  printf("%s",buf);    memset(buf, 0, sizeof(buf));}
  • 关闭
    close(fd);close(sockfd);
client
头文件
#include <sys/types.h>      /* See NOTES */
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
client网络编程流程

  • 创建socket
  • 连接(connect)
  • 读取消息
  • 创建socket
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);    if(-1 == sockfd){        perror("socket");        exit(1);    }    struct sockaddr_in server_addr;    memset(&server_addr, 0, sizeof(server_addr));    server_addr.sin_family = AF_INET;    server_addr.sin_port = 8000;    server_addr.sin_addr.s_addr = inet_addr("172.25.0.154");}
  • 向服务器发起连接
    //向服务器发起连接    int ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));    if(-1 == ret){        perror("connect");        exit(1);    }
  • 读取消息
    char buf[32] = {0};    while(1){        printf("请输入你想要发送的信息:");        scanf("%s",buf);        ret = send(sockfd, buf, strlen(buf), 0);        if(-1 == ret){            perror("send");            exit(1);        }        if(!strcmp(buf,"bye")){            break;        }        memset(buf, 0, sizeof(buf));    }
    网络编程
server
网络编程头文件
/*  int socket(int domain, int type, int protocol) 需要的头文件  eg:  int sockfd = socket(AF_INET, SOCK_STREAM, 0);        ↓       ↓     ↓        ipv4协议  流式套接字  具体类型协议*/#include <sys/types.h>     #include <sys/socket.h>/*  inet_aton,  inet_addr,  inet_network, inet_ntoa,  inet_makeaddr, inet_lnaof, inet_netof接口需要的头文件*/#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h
server网络编程流程

  • 创建socket
  • 绑定信息(bind)
  • 设置监听队列(listen)
  • 接受连接(建立TCP连接)(accpet)
  • 创建socket
//创建socket    int sockfd = socket(AF_INET, SOCK_STREAM, 0);   //(ipv4协议,流式套接字,具体的协议类型)  if(-1 == sockfd){    perror("socket");    exit(1);  }    /*    setsockopt设置SO_REUSEADDR。    socket关闭之后并不会立即收回,而是要经历一个TIME_WAIT的阶段。windows下最多可以达到4分钟。    所以在这个时候对这个端口进行重新绑定就会出错。所以需要先设置 SO_REUSEADDR.    或者在closesocket的时候,使用setsockopt设置SO_DONTLINGER。也不会有TIME_WAIT的阶段.    通常使用这个设置来加强网络程序的健壮性。  */  int opt = 1;  setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));  //地址可以被重复绑定    struct sockaddr_in server_addr; //保存服务器的消息  memset(&server,0,sizeof(server_addr));    server_addr.sin_family = AF_INET;   //协议族  server_addr.sin_port = 8000;    //端口  server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");   //地址  INADDR_ANY->所有地址

  • 绑定信息
int ret = bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));  if(-1 == ret){    perror("bind");    exit(1);  }


  • 设置监听队列
ret = listen(sockfd, 10);  if(-1 == ret){    perror("listen");    exit(1);  }

  • 接受连接(建立TCP连接)
printf("等待客户端连接");  struct sockaddr_in client_addr; //用于保存客户端消息  int length = sizeof(client_addr);  int fd = accept(sockfd, (struct sockaddr *)&client_addr, &length);  if(-1 == fd){    perror("accpet");    exit(1);  }

  • 读取消息
char buf[32] = 0;while(1){  ret = recv(fd, buf, sizeof(buf), 0);  if(-1 == fd){    perror("recv");    exit(1);  }  printf("客户端接受的消息为:");  printf("%s",buf);    memset(buf, 0, sizeof(buf));}


  • 关闭
close(fd);close(sockfd);
client
头文件
#include <sys/types.h>      /* See NOTES */#include <sys/socket.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h
client网络编程流程

  • 创建socket
  • 连接(connect)
  • 读取消息
  • 创建socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);      if(-1 == sockfd){          perror("socket");          exit(1);      }        struct sockaddr_in server_addr;      memset(&server_addr, 0, sizeof(server_addr));      server_addr.sin_family = AF_INET;      server_addr.sin_port = 8000;      server_addr.sin_addr.s_addr = inet_addr("172.25.0.154");  }

  • 向服务器发起连接
//向服务器发起连接      int ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));      if(-1 == ret){          perror("connect");          exit(1);      }

  • 读取消息
char buf[32] = {0};        while(1){          printf("请输入你想要发送的信息:");          scanf("%s",buf);          ret = send(sockfd, buf, strlen(buf), 0);          if(-1 == ret){              perror("send");              exit(1);          }            if(!strcmp(buf,"bye")){              break;          }            memset(buf, 0, sizeof(buf));      }    ```

  • 关闭
    close(sockfd);



关注下面的标签,发现更多相似文章