socket套接字编程
网络基础概念 IP地址: 在IP协议中用来标识网络中不同主机的地址; IPv4:IP地址是一个4字节,32位的整数; IPv6是一个16字节,128位的整数。 端口号: 用来标识网络中唯一的一个网络服务进程,一个端口号只能被一个进程占用 一个进程可以绑定多个端口号,但是一个端口号只能被一个进程绑定 网络字节序: 发送主机通常将发送缓冲区的数据按内存地址从低到高的顺序发出; 接收主机把从网络上接受的字节依次保存在接收缓冲区中,按内存地址从低到高顺序保存; 所以,网络字节流的地址应该这样规定:先发出的数据是低地址,后发出去的数据是高地址。 TCP/IP协议规定网络数据流应采用大端字节序,即低地址高字节,不管这台主机是大端还是小端,都需要按照TCP/IP规定的网络字节序接受/发送数据。 如果当前主机是小端,需要先将数据转换成大端,否则忽略直接发送。 为提高网络程序的可移植性,使同样的C代码在大端机和小端机上编译后都能正常运行,可以调用库函数做网络字节序和主机字节序之间的转换。 #include<arpa/inet.h> uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t