bind函数用法
来源:互联网 发布:驾驶员疲劳检测软件 编辑:程序博客网 时间:2024/06/07 09:13
MSDN中的bind
int bind (
SOCKET s,
const struct sockaddr FAR* name,
int namelen
);
关注第二个参数
The SOCKADDR structure varies depending on the protocol selected. Except for the sa_family field,SOCKADDR contents are expressed in network byte order.
struct sockaddr { u_short sa_family; char sa_data[14];};
In Windows Sockets 2, the name parameter is not strictly interpreted as a pointer to aSOCKADDR structure. It is presented in this manner for Windows Sockets compatibility. The actual structure is interpreted differently in the context of different address families. The only requirements are that the firstu_short
is the address family and the total size of the memory buffer in bytes isnamelen
The structure below is used with TCP/IP. Other protocols use similar structures.
struct sockaddr_in { short sin_family;//对应sa_family u_short sin_port;//2个字节 struct in_addr sin_addr;//4个字节 char sin_zero[8];//8个字节};
这个结构是根据sa_family的不同而不同的,在TCP/IP中就是对应struct sockaddr_in,可以看到两个结构的大小其实是一样的,指针转换起来毫无压力·~
附带个例子
int bind(
SOCKET s,
const struct sockaddr FAR *name,
int namelen
);
当创建了一个Socket以后,套接字数据结构中有一个默认的IP地址和默认的端口号。一个服务程序必须调用bind函数来给其绑定一个IP地址和一个特定的端口号。客户程序一般不必调用bind函数来为其Socket绑定IP地址和断口号。该函数的第一个参数指定待绑定的Socket描述符;第二个参数指定一个sockaddr结构,该结构是这样定义的:
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
其中sin_family置AF_INET;sin_port指明端口号;sin_addr结构体中只有一个唯一的字段s_addr,表示IP地址,该字段是一个整数,一般用函数inet_addr()把字符串形式的IP地址转换成unsigned long型的整数值后再置给s_addr。有的服务器是多宿主机,至少有两个网卡,那么运行在这样的服务器上的服务程序在为其Socket绑定IP地址时可以把htonl(INADDR_ANY)置给s_addr,这样做的好处是不论哪个网段上的客户程序都能与该服务程序通信;如果只给运行在多宿主机上的服务程序的Socket绑定一个固定的IP地址,那么就只有与该IP地址处于同一个网段上的客户程序才能与该服务程序通信。下面是一个bind函数调用的例子:
struct sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8888);
saddr.sin_addr.s_addr = htonl(INADDR_ANY); //不用理其他成员了,因为已经是4字节了~~
bind(ListenSocket,(struct sockaddr *)&saddr,sizeof(saddr));
注解:
htonl()将主机的无符号长整形数转换成网络字节顺序。
INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。
- bind函数用法
- Javascript中bind、call、apply函数用法
- Javascript中bind、call、apply函数用法
- bind 用法
- bind函数
- bind函数
- bind()函数
- bind函数
- bind函数
- Javascript中call,apply,bind三个函数的用法
- JavaScript中bind、call、apply函数用法详解
- JavaScript中bind、call、apply函数用法详解
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- JavaScript中bind、call、apply函数用法详解
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- 1090. Highways(用并查集找出最小生成树,输出最小生成树中最长的边
- 1940. Ordering Tasks(拓扑排序,用set装住入度为0的点)
- 1424.奖金(拓扑排序)
- DAG? 判断是否为有向无环图DAG
- select函数的作用!
- bind函数用法
- 杂感
- flex 显示图片二进制流
- Windows下实现TCP通信
- ISO C++ forbids declaration of ‘vector’ with no type
- 游戏开发入门图书推荐(转载,附下载地址)
- Java中的泛型
- java中的反射
- Java中的枚举