python bind函数_python bind是什么意思

bind()函数介绍

在建立套接字文件描述符成功后,需要对套接字进行地址和端口的绑定,才能进行数据的接收和发送操作。

函数原型

bind()函数将长度为addlen的struct sockadd类型的参数my_addr与sockfd绑定在一起,将sockfd绑定到某个端口上,如果使用connect()函数则没有绑定的必要。绑定的函数原型如下:#include

#include

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值及含义

示例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教程,尽在云海天教程网,欢迎在线学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值