参考
一、Socket技术详解 - 简书 (jianshu.com)
sockaddr和sockaddr_in详解_爱橙子的OK绷的博客-CSDN博客_sockaddr_in
API
1. 创建套接字
int socket(int af, int type, int protocol);
参数
af:? 地址族,即IP地址类型
??????常用的有AF_INET(IPv4)和AF_INET6(IPv6)
type:? 数据传输方式
? ? ? ? ? 常用的有SOCK_STREAM(面向连接、可靠)和 SOCK_DGRAM(无连接)
protocol:? 传输协议
? ? ? ? ? ? ? ? 常用的有IPPROTO_TCP(TCP传输协议)和 IPPTOTO_UDP(UDP传输协议)
2. 指定本地地址
int bind(int sock, struct sockaddr *addr, socklen_t addrlen);
服务器端要用bind()函数将套接字与特定的IP地址和端口绑定起来,只有这样,流经该IP地址和端口的数据才能交给套接字处理
sockaddr 和 sockaddr_in
struct sockaddr_in {
short sin_family; //地址族
u_short sin_port; //16位TCP/UDP端口号
struct in_addr sin_addr; //32位IP地址
char sin_zero[8]; //不使用
};
在网络编程中我们使用sockaddr_in来建立所需的信息,强制类型转换后传入用sockaddr做参数的函数
参数
sock:? socket文件描述符
addr:? sockaddr结构体变量的指针
addrlen:? addr变量的大小,可由sizeof()计算得出
|