知行编程网知行编程网  2022-11-03 07:30 知行编程网 隐藏边栏  8 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python bind是什么意思的相关知识,希望可以帮到处于编程学习途中的小伙伴


python绑定是什么意思


bind()函数介绍

socket文件描述符建立成功后,需要将地址和端口绑定到socket上才能接收和发送数据。


函数原型

bind() 函数将struct sockadd 类型的参数my_addr 和adden 的长度绑定到sockfd,并将sockfd 绑定到一个端口。如果使用 connect() 函数,则无需绑定。绑定函数原型如下:

#include<sys/types.h>
#include<sys/socket.h>
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);

bind()函数有3个参数。



·


第1个参数sockfd是用socket()函数创建的文件描述符。



·


第2个参数my_addr是指向一个结构为sockaddr参数的指针,sockaddr中包含了地址、端口和IP地址的信息。在进行地址绑定的时候,需要弦将地址结构中的IP地址、端口、类型等结构struct sockaddr中的域进行设置之后才能进行绑定,这样进行绑定后才能将套接字文件描述符与地址等接合在一起。



·


第3个参数addrlen是my_addr结构的长度,可以设置成sizeof(struct sockaddr)。使用sizeof(struct sockaddr)来设置套接字的类型和其对已ing的结构。

当bind()函数的返回值为0时,表示绑定成功,-1表示绑定失败。 errno的错误值如表1所示。

表1 bind的errno值及含义

python绑定是什么意思


示例1

首先创建一个 UNIX 家族流式套接字,然后将套接字地址绑定到套接字文件描述符。

#define MY_SOCK_PATH "/somepath"
int main(int argc, char *argv[])
{
    int sfd;
    struct sockaddr_un addr; //AF_UNIX对应的结构
    sfd = socket(AF_UNIX, SOCK_STREAM, 0); //初始化一个AF_UNIX族的流类型socket
    if (sfd == -1) { //检查是否正常初始化socket
        perror("socket");
        exit(EXIT_FAILURE);
    }
    memset(&addr, 0, sizeof(struct sockaddr_un));//将变量addr置0
    addr.sun_family = AF_UNIX; //协议族为AF_UNIX
    strncpy(addr.sun_path, MY_SOCK_PATH, sizeof(addr.sun_path)-1); //复制路径到地址结构
    perror("bind");
    exit(EXIT_FAILURE);
    }
    ... //数据接收发送及处理过程
    close(sfd); //关闭套接字文件描述符
}


示例2

使用结构struct sockaddr_in绑定一个AF_INET族的流协议,先将结构struct sockaddr_in的sin_family设置为AF_INET,然后设置端口,再设置IP地址,最后绑定。

#define MYPORT 3490
int main(int argc, char *argv[])
{
    int sockfd; //套接字文件描述符变量
    struct sockaddr_in my_addr; //以太网套接字地址结构
    sockfd = socket(AF_INET, SOCK_STREAM, 0); //初始化socket
    if (sockfd == -1) {
    peeror("socket"); //检查是否正常初始化socket
    exit(EXIT_FAILURE);
    }
    my_addr.sin_family = AF_INET; //地址结构的协议族
    my_addr.sin_port = htons(MYPORT); //地址结构的端口地址,网络字节序
    my_addr.sin_addr.s_addr = inet_addr("192.168.1.150"); //IP,将字符串的IP地址转化为网络字节序
    bzero(&(my_addr.sin_zero), 8); //将my_addr.sin_zero置为0
    if (bind(sockfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) == -1) { // 判断是否绑定成功
    perror("bind");
    exit(EXIT_FAILURE);
    }
    ... //接收和发送数据,进行数据处理
    close(sockfd); //关闭套接字文件描述符
}

众多
,尽在python学习网,欢迎在线学习!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享