• 第三章 套接字编程简介


    //1.
    IPv4地址和TCP、UDP端口号在套接字地址结构中总是以网络字节序来存储的
    套接字字体结构在两个方向上进行传递:从进程到内核和从内核到进程
    
    
    //2.
    小端:低序字节存储在起始位置
    大端:高序字节存储在起始位置
    主机字节序:即某个给定的系统使用的字节序,即可能是小端,也可能是大端,常见的一般是小端
    网络字节序:大端模式
    
    主机字节序与网络字节序转换函数:
    htons
    htonl
    ntohs
    ntohl
    当使用以上函数时候,我们并不关心主机字节序和网络字节序的真实情况,我们要做的只是调用适当的函数进行转换,
    在网络字节序与主机字节序相同的机器上,这四个函数被定义为空宏
    
    
    //3.
    inet_addr:将点分十进制字符串转为32位网络字节序值,该函数存在一个问题:
    	当该函数出错的时候,返回 INADDR_NONE ,这就意味着 255.255.255.255 无法由此函数进行处理,
    	因为此值被解释为函数调用失败,如今此函数已被废弃,最好不用
    	#define INADDR_NONE             0xffffffff
    
    	int nValue = inet_addr("");		//nValue = 0xffffffff
    
    inet_pton:将第二个参数所指的字符串转为相应的数值结果,支持IPv4,IPv6。失败返回0,成功返回1,
    	定义于头文件 WS2tcpip.h 中,头文件 WS2tcpip.h 中 有 #include <winsock2.h> 语句
    	int nRe = inet_pton(AF_INET, "1.2.3.4", &sockAddr.sin_addr.s_addr);	//nRe = 1	S_addr = 0x04030201
    
    inet_ntop:执行和 inet_pton 相反的转换
    	执行成功,返回传入的缓冲区的字符串,若传入缓冲区长度不足,返回空指针
    	char buff[16] = {};	//buff = 0x003af720
    	auto pStr0 = inet_ntop(AF_INET, &sockAddr.sin_addr.s_addr, buff, 16); //pStr0= 0x003af720 "1.2.3.4"
    	auto pStr1 = inet_ntop(AF_INET, &sockAddr.sin_addr.s_addr, buff, 1);  //pStr1 = 0x00000000
    
    
    //4.
    字节流套接字上调用 read 和 write 输入或输出的字节数可能比请求的数量少,然而这不是出错的状态。
    上述现象的原因是在于内核中用于套接字的缓冲区可能已到达了极限。此时需要再次调用 read 或者 write 以输入输出剩余字节
    上述现象在 read 一个字节流套接字时很常见,但是在 write 一个字节流套接字时,只在将套接字设为非阻塞时才会出现
    

      

  • 相关阅读:
    机器学习实战
    python中的上下文管理器
    python中的参数传递
    SecureCRT在mac下无法输入中断命令
    Vim练级攻略(转)
    09_MySQL DQL_SQL99标准中的多表查询(外连接)
    08_MySQL DQL_SQL99标准中的多表查询(内连接)
    07_MySQL DQL_多表查询_等值内连接
    06_MySQL DQL_分组查询
    05_MySQL常见函数_分组函数
  • 原文地址:https://www.cnblogs.com/szn409/p/7795458.html
Copyright © 2020-2023  润新知