【服务器通信-bind】——int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)

#include  

#include

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

sockfd:

    socket文件描述符

addr:

    构造出IP地址加端口号

addrlen:

    sizeof(addr)长度

返回值:

    成功返回0,失败返回-1, 设置errno

解释分析:    

服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接,因此服务器需要调用bind绑定一个固定的网络地址和端口号。

bind()的作用是将参数sockfd和addr绑定在一起,使sockfd这个用于网络通讯的文件描述符监听addr所描述的地址和端口号。

struct sockaddr *是一个通用指针类型,addr参数实际上可以接受多种协议的sockaddr结构体,而它们的长度各不相同,所以需要第三个参数addrlen指定结构体的长度。

如下:

struct sockaddr_in servaddr;

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(6666);


首先将整个结构体清零

然后设置地址类型为AF_INET:

        网络地址为INADDR_ANY,这个宏表示本地的任意IP地址,因为服务器可能有多个网卡,每个网卡也可能绑定多个IP地址,这样设置可以在所有的IP地址上监听,直到与某个客户端建立了连接时才确定下来到底用哪个IP地址

最后端口号为6666。

你可能感兴趣的:(认识,Linux,系统下的编程,服务器,linux,网络通信)