Linux c++(socket网络通信基础)

只有整型和浮点型,才会存在大小端问题。大小端在使用上就好似鸡蛋要从那边吃,没有什么差异
小端模式对于英特尔的cpu来说就是小端在前大端在后(英特尔cpu是小端的)
国产cpu就是大端

使用16进制是为了直接申请内存,因为申请内存,是2的整数倍这样效率才好
8进制多用于权限相关

SOCKET

  • 文件(内核的缓冲区)操作

  • socket tcp server

    • 创建套接字
      • int lfd = socket;
    • 绑定本地IP和端口
      • struct sockaddr_in serv;
      • serv.port = htons(port);
      • serv.IP = htnol(INADDR_ANY);
      • bind(lfd,&serv,sizeof(serv));
    • 监听
      • listen(lfd,128);
    • 等待并接收链接请求
      • struct sockaddr_in client;
      • int len = sizeof(client);
      • int cfd = accept(lfd,&client,&len);
        • cfd 用于通信的描述符
    • 通信
      • 接收数据: read/recv
      • 发送数据: write/send
    • 关闭
      • close(lfd);
      • close(cfd);
  • socket tcp client

    • 创建套接字
      • int fd = socket;
    • 链接服务器
      • struct sockaddr_in server;
      • server.port
      • server.ip =
      • server.family
      • connect(fd,&server,sizeof(server));
    • 通信
      • 接收数据: read/recv
      • 发送数据: write/send
    • 断开
      • close(lfd);
      • close(cfd);
  • IP地址转换函数(方式一)

    • 本地IP转网络字节序 字符串---> int(大端方式存储)
    • int inet_pton(int af,const char *src,void *dst);
      • df
      • src
        • 点分十进制的IP
      • dst
      char buf[]="192.168.1.4";
      unsigned int num = 0;
      inet_pton(AF_INET,buf,&num);
      unsigned char *p = (unsigned char*)#
      printf("%s\n",p);
      char str[1024] = {0};
      inet_ntop(AF_INET,&num,str,INET_ADDRSTRLEN);
      printf("%s\n",str);
      
    • 网络字节序转本地IP int--->字符串
    • const char* inet_ntop(int af,const void* src,char* dst,socklen_t size);
      • af
        • af_inet
      • src
        • 网络字节序的整型IP
      • dst
      • size INET_ADDRSTRLEN 宏的值16 INADDR_ANY值为0
  • IP地址转换函数(方式二)

    • 主机字节顺序 --> 网络字节顺序
      uint16_t htons(uint16_t hostshort); 端口
      uint32_t htonl(uint32_t hostlong); IP
    • 网络字节顺序 --> 主机字节顺序
      uint16_t ntohs(uint16_t netshonrt); 端口
      uint32_t ntohl(uint32_t netlong); IP

posted on 2021-05-08 11:45  lodger47  阅读(232)  评论(0)    收藏  举报

导航