⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 14.3.3 bind函数.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
14.3.3 bind函数
在创建了套接字之后,应该将该套接字绑定到本地的某个地址和端口上,这需要通过 bind函数
来实现。该函数的原型声明如下所示 : 
int bind( SOCKET s , const struct sockaddr FAR *name, int namelen ); 
这个函数接收三个参数。第一个参数 ( s )指定要绑定的套接字 ;第二个参数 ( name )指定了
该套接字的本地地址信息,这是一个指向 sockaddr结构的指针变量,由于该地址结构是为所有
的地址家族准备的,这个结构可能 (通常会)随所使用的网络协议不同而不同,
sockaddr结构的定义如下所示 : 
struct sockaddr { 
u_short sa_family; 
char sa_data[14] : 

sockaddr结构的第一个字段 (sa_farnily)指定地址家族,对于 TCPIIP协议的套接字,必须设置
为 AF_INET;第二个字段 C s a_data)仅仅是表示要求一块内存分配区,起到占位的作用,该
区域中指定与协议相关的具体地址信息。由于实际要求的只是内存区,所以对于不同的协议家族,
用不同的结构来替换 sockaddr o除了 sa_farnily外, sockaddr是按网络字节顺序表示的。在
基于 TCP_IP的 socket编辑过程中,可以用 sockaddr_in结构替换 sockaddr,以方便我们填写
地址信息。 
sockadd_in结构体的定义如下 : 
struct sockaddr_in{ 
short sin_family; 
unsigned short sin_port; 
struct in_addr sin_addr; 
char sin_zero[8] ; 
其中sin_family表示地址族,对于IP地址, sin_family成员将一直是AF_INET;成员 sin_port指
定的是将要分配给套接字的端口:成员sin addr给出的是套接字的主机IP地址:成员sin-zero只
是-个填充数,以使sockaddr in结构和sockaddr结构的长度一样。如果这个函数调用成功,它将
运回0。如果调用失败,这个函数就会运回一个SOCKET_ERROR,错误信息可以通过
WSAGetLastErrOf函数返回。
另外, sockaddr_in结构中 sin_addr成员的类型是in addr,该结构的定义如下所示: 

struct  in_addr {  
union  {  
struct  
{ 
u_char s_b1 , s_b2 , s_b3 , s_b4;  
} S_un_b;  
struct  { u_short  s_w工, s_w2 ;  }  S_u口_W;  
u_long  S_addr; 
} S_un ;  

可以看到, in_addr结构实际上是一个联合,通常利用这个结构将一个点分十进制格式的 IP地
址转换为 u_long类型,并将结果赋给成员 S addr。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -