今天就跟大家聊聊有關(guān)python bind函數(shù)是什么意思,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)、雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、赤峰林西網(wǎng)站維護(hù)、網(wǎng)站推廣。
bind()函數(shù)介紹
在建立套接字文件描述符成功后,需要對(duì)套接字進(jìn)行地址和端口的綁定,才能進(jìn)行數(shù)據(jù)的接收和發(fā)送操作。
函數(shù)原型
bind()函數(shù)將長(zhǎng)度為addlen的struct sockadd類(lèi)型的參數(shù)my_addr與sockfd綁定在一起,將sockfd綁定到某個(gè)端口上,如果使用connect()函數(shù)則沒(méi)有綁定的必要。綁定的函數(shù)原型如下:
#include#include int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
bind()函數(shù)有3個(gè)參數(shù)。
·第1個(gè)參數(shù)sockfd是用socket()函數(shù)創(chuàng)建的文件描述符。
·第2個(gè)參數(shù)my_addr是指向一個(gè)結(jié)構(gòu)為sockaddr參數(shù)的指針,sockaddr中包含了地址、端口和IP地址的信息。在進(jìn)行地址綁定的時(shí)候,需要弦將地址結(jié)構(gòu)中的IP地址、端口、類(lèi)型等結(jié)構(gòu)struct sockaddr中的域進(jìn)行設(shè)置之后才能進(jìn)行綁定,這樣進(jìn)行綁定后才能將套接字文件描述符與地址等接合在一起。
·第3個(gè)參數(shù)addrlen是my_addr結(jié)構(gòu)的長(zhǎng)度,可以設(shè)置成sizeof(struct sockaddr)。使用sizeof(struct sockaddr)來(lái)設(shè)置套接字的類(lèi)型和其對(duì)已ing的結(jié)構(gòu)。
bind()函數(shù)的返回值為0時(shí)表示綁定成功,-1表示綁定失敗,errno的錯(cuò)誤值如表1所示。
表1 bind的errno值及含義
示例1
先建立一個(gè)UNIX族的流類(lèi)型套接字,然后將套接字地址和套接字文件描述符進(jìn)行綁定。
#define MY_SOCK_PATH "/somepath" int main(int argc, char *argv[]) { int sfd; struct sockaddr_un addr; //AF_UNIX對(duì)應(yīng)的結(jié)構(gòu) sfd = socket(AF_UNIX, SOCK_STREAM, 0); //初始化一個(gè)AF_UNIX族的流類(lèi)型socket if (sfd == -1) { //檢查是否正常初始化socket perror("socket"); exit(EXIT_FAILURE); } memset(&addr, 0, sizeof(struct sockaddr_un));//將變量addr置0 addr.sun_family = AF_UNIX; //協(xié)議族為AF_UNIX strncpy(addr.sun_path, MY_SOCK_PATH, sizeof(addr.sun_path)-1); //復(fù)制路徑到地址結(jié)構(gòu) perror("bind"); exit(EXIT_FAILURE); } ... //數(shù)據(jù)接收發(fā)送及處理過(guò)程 close(sfd); //關(guān)閉套接字文件描述符 }
示例2
使用結(jié)構(gòu)struct sockaddr_in綁定一個(gè)AF_INET族的流協(xié)議,先將結(jié)構(gòu)struct sockaddr_in的sin_family設(shè)置為AF_INET,然后設(shè)置端口,接著設(shè)置一個(gè)IP地址,最后進(jìn)行綁定。
#define MYPORT 3490 int main(int argc, char *argv[]) { int sockfd; //套接字文件描述符變量 struct sockaddr_in my_addr; //以太網(wǎng)套接字地址結(jié)構(gòu) sockfd = socket(AF_INET, SOCK_STREAM, 0); //初始化socket if (sockfd == -1) { peeror("socket"); //檢查是否正常初始化socket exit(EXIT_FAILURE); } my_addr.sin_family = AF_INET; //地址結(jié)構(gòu)的協(xié)議族 my_addr.sin_port = htons(MYPORT); //地址結(jié)構(gòu)的端口地址,網(wǎng)絡(luò)字節(jié)序 my_addr.sin_addr.s_addr = inet_addr("192.168.1.150"); //IP,將字符串的IP地址轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序 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); } ... //接收和發(fā)送數(shù)據(jù),進(jìn)行數(shù)據(jù)處理 close(sockfd); //關(guān)閉套接字文件描述符 }
看完上述內(nèi)容,你們對(duì)python bind函數(shù)是什么意思有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。