标签:
Linux中的网络编程是通过 Socket (套接字)实现。流式套接字(SOCK_STREAM) 流式套接字可以提供可靠的、面向连接的通讯流,它使用TCP协议。TCP保证了数据传输的正确性和顺序性。 数据报套接字(SOCK_DGRAM) 数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP。 原始套接字(SOCK_RAM) 原始套接字允许使用IP协议,主要用于新的网络协议的测试等。
Socket 相关结构体:
struct sockaddr_un { sa_family_t sun_family; char sun_path[UNIX_PATH_MAX]; }; sun_family: 一般是 PF_UNIX 或 AF_UNIX; sun_path: 路径名;
struct sockaddr { u_short sa_family; char sa_data[14]; }; sa_family: 地址族,一般为AF_INET,代表 Internet (TCP/IP) 地址族。 sa_data: 包含该socket的IP地址和端口号。
struct sockaddr_in { short int sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; }; sin_family: 地址族。一般来说是AF_INET和PF_INET sin_port: 端口号(使用网络字节顺序)。在linux 下,端口号的范围是 0~65535, 0~1024 范围的端口号已经被系统使用或保留。 sin_addr: 存储IP地址,使用in_addr 这个数据结构。 typedef struct in_addr { union { struct { unsigned char s_b1, s_b2, s_b3, s_b4; }S_un_b; struct { unsigned short s_w1, s_w2; }S_un_w; unsigned long S_addr; }S_un; }in_addr; in_addr 是一个存储ip地址的共用体,它有三种表达方式: 第一种:用四个字节来表示IP地址的四个数字。 第二种:用两个字节来表示IP地址。 第三种:用一个长整型来表示IP地址。 我们一般使用第三种。 sin_zero: 为了将 sockaddr_in 结构与 sockaddr 结构对齐。注意:填值的时候使用 sockaddr_in ,而作为函数的参数传入的时候转换成 sockaddr 结构。
标签:
原文地址:http://blog.csdn.net/u011641885/article/details/46476529