常用的套接字类型有3种:
(1)流套接字(SOCK——STREAM):使用了面向连接的可靠的数据通信方式,即TCP协议;
(2)数据报套接字(Raw Sockets):使用了不面向连接的数据传输方式,即UDP;
(3)原始套接字(SOCK——RAW):没有经过处理的IP数据包,可以根据自己程序的要求进行封装。
1、套接字相关的数据类型:sockaddr和sockaddr_in;sockaddr用来保存一个套接字,定义如下:
struct sockaddr
{
unsigned short int sa_family; //指定通信地址类型,如果是TCP/IP通信,则值为AF_inet
char sa_data[14]; //最多用14个字符长度,用来保存IP地址和端口信息
};
struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。
struct sockaddr_in
{
unsigned short int sin_family; //指定通信地址类型
uint16_t sin_port; //套接字使用的端口号
struct in_addr sin_addr; //需要访问的IP地址
un