基础知识:
首先我们来了解Linux网络API:
①socket地址API: | socket最开始的含义:一个IP地址和端口对(ip,port)。他唯一的表示了TCP通信的一端。 |
②socket基础API: | socket主要的API包括创建socket,命名socket,监听socket,接受连接,发起连接,读写数据,获取地址信息,检测带外标记,以及读取和设置socket选项。 |
③网络信息API: | 以实现主机名和IP地址之间的转换;服务名称和端口号之间的转换。这些API都定义在netdb.h头文件中。 |
主机字节序和网络字节序
1.字节序:现代CPU的累加器一次都能装载(至少)4字节(32位机),即一个整数,那么这4个字节在内存中排列的顺序将影响它被累加器转载成的整数值。这就是字节序问题。
大端字节序 | 一个整数的高位字储存在内存的低地址处。 |
小端字节序 | 是指整数的高位字节存储在内存的高地址。 |
主机字节序 | 现代PC大多采用小端字节序,因此成为主机字节序。 |
网络字节序 | 大端字节序也称为网络字节序。 |
Linux提供了4个函数来完成主机字节序列和网络字节序列的转换以保证接收端和发送端的一致性:
#include<netinet/in.h>
unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostshort);
unsigned long int ntohl(unsigned long int netlong);
unsigned short int ntohs(unsigned short int netshort);
//他们的含义很明确,比如htonl表示为:“host to nettwork long”
//在这四个函数中,长整型函数通常用来转换IP地址,
//短整型函数用来转换端口号。
TCP函数了解:
系统调用函数1:创建socket(文件描述符)
函数头文件