常见的两种套接字类型
SOCK_STREAM TCP 流格式套接字
SOCK_DGRAM UDP 数据包套接字
基础知识:
struct sockaddr // 基本不用
{
unsigned short sa_family; // AF_INET
char sa_data[14];
};
// AF_INET是 IPv4 网络协议的套接字类型,AF_INET6 则是 IPv6 的;而 AF_UNIX 则是 Unix 系统本地通信。
struct sockaddr_in // 大小一样,可以用sockaddr *引用 sockaddr_in
{
short int sin_family; // AF_INET , 存储在本机上,不需要转变为网络字节顺序
unsigned short int sin_port; //端口号,NBO
struct in_addr sin_addr; // IP地址,NBO
unsigned char sin_zero[8]; //需要memset初始化,一般不使用
};
struct in_addr
{
unsigned long s_addr; // 存放IP地址
};
传输时要考虑字节序的问题,HBO (Host Byte Order) 和CPU有关。NBO(Network Byte Order) 是Big-endian的写法。
例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
addr big-endian little-endian // 以每个字节为单位
0