网络编程预备知识
-
**socket
- 是一种编程接口
- 也是一种文件描述符(套接字)
- 可用于 TCP、UDP、IPX通信
-
socket的类型
- 流式套接字(SOCK_STREAM):提供一种面向连接的服务,用于TCP传输控制的协议
- 数据报套接字(SOCK_DGRAM):提供无连接的服务,用于UDP通信
- 元素套接字(SOCK_RAW):提供底层通信(IP、ICMP、IGMP)
-
IP地址:网络中标识主机的编号,常用点分形式存在”192.168.2.177“
-
IPV4:整个ip占32位,每段8位表示 0~255
-
IPV6:整个ip占128位
-
IP地址:网络号 + 主机号 —>”192.168.2“ + ”177“
其中,”2“ 表示网段号,也就是在哪个路由器网络中(网络号+1)
-
网络ip分类:主要ip的(第一段)前8位数据组成
- A类网: 0 ~ 127 子网掩码:255.0.0.0
- B类网:128 ~ 191 子网掩码:255.255.0.0
- C类网:192 ~ 223 子网掩码:255.255.255.0
- D类网:224 ~ 239 组播地址
- E类网:240 ~ 255 保留测试地址
-
私有IP的地址范围
-
已知 ip,
- 网络号: = ip & (umask)= ”192.168.2.177“ & (255.255.255.0)
- 主机号: = ip & (~umask)= ”192.168.2.177“ & (~(255.255.255.0))
-
由于网络中只能识别二进制数据,因此ip地址必须进行转换
-
将代码字符串的ip地址转换成 网络字节序二进制 ,并返回转换后的地址
in_addr_t inet_addr(const char *cp);
{
cp:代码中的字符串ip(主机字节序的ip地址)
返回值:成功返回二进制字序首地址
错误为-1
}
-
将网络字序的二进制转换为主机字序的ip
char *inet_ntoa(struct in_addr in);
{
in : 网络字节序的ip地址
返回值:成功返回主机字节序的ip首地址
}
-
字节序:数据的存储顺序(方式)
-
端口号:在主机中标识处理网络数据的进程的id
- 众所周知的端口号:1 ~ 1023 (用户一般不能使用)
- 已登记的端口号:1024 ~ 49151
- 动态端口号: 49152 ~ 65535
- 主机字节序转网络字节序
u_long htonl(int port)
u_short htons(int port)
u_long ntohl(u_long hostlong)
u_short ntohs(u_short hostshort)
-
客户端:与用户进行数据交互的界面程序,即,上位机
服务器:为客户端提供数据服务的后台软件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)