欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言 bind()函數(shù)案例詳解

 更新時(shí)間:2021年08月23日 08:47:58   作者:xc_tsao  
這篇文章主要介紹了C語言 bind()函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

bind()函數(shù)介紹

       在建立套接字文件描述符成功后,需要對(duì)套接字進(jìn)行地址和端口的綁定,才能進(jìn)行數(shù)據(jù)的接收和發(fā)送操作。

函數(shù)原型

       bind()函數(shù)將長度為addlen的struct sockadd類型的參數(shù)my_addr與sockfd綁定在一起,將sockfd綁定到某個(gè)端口上,如果使用connect()函數(shù)則沒有綁定的必要。綁定的函數(shù)原型如下:

#include<sys/types.h>
#include<sys/socket.h>
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地址、端口、類型等結(jié)構(gòu)struct sockaddr中的域進(jìn)行設(shè)置之后才能進(jìn)行綁定,這樣進(jìn)行綁定后才能將套接字文件描述符與地址等接合在一起。
  • 第3個(gè)參數(shù)addrlen是my_addr結(jié)構(gòu)的長度,可以設(shè)置成sizeof(struct sockaddr)。使用sizeof(struct sockaddr)來設(shè)置套接字的類型和其對(duì)已ing的結(jié)構(gòu)。
    bind()函數(shù)的返回值為0時(shí)表示綁定成功,-1表示綁定失敗,errno的錯(cuò)誤值如表1所示。

表1 bind的errno值及含義

含義 備注
EADDRINUSE 給定地址已經(jīng)使用
EBADF sockfd不合法
EINVAL sockfd已經(jīng)綁定到其他地址
ENOTSOCK sockfd是一個(gè)文件描述符,不是socket描述符
EACCES 地址被保護(hù),用戶的權(quán)限不足
EADDRNOTAVAIL 接口不存在或者綁定地址不是本地 UNIX協(xié)議族,AF_UNIX
EFAULT my_addr指針超出用戶空間 UNIX協(xié)議族,AF_UNIX
EINVAL 地址長度錯(cuò)誤,或者socket不是AF_UNIX族 UNIX協(xié)議族,AF_UNIX
ELOOP 解析my_addr時(shí)符號(hào)鏈接過多 UNIX協(xié)議族,AF_UNIX
ENAMETOOLONG my_addr過長 UNIX協(xié)議族,AF_UNIX
ENOENT 文件不存在 UNIX協(xié)議族,AF_UNIX
ENOMEN 內(nèi)存內(nèi)核不足 UNIX協(xié)議族,AF_UNIX
ENOTDIR 不是目錄 UNIX協(xié)議族,AF_UNIX
EROFS socket節(jié)點(diǎn)應(yīng)該在制度文件系統(tǒng)上 UNIX協(xié)議族,AF_UNIX

示例1

先建立一個(gè)UNIX族的流類型套接字,然后將套接字地址和套接字文件描述符進(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族的流類型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ā)送及處理過程
    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)閉套接字文件描述符
}

到此這篇關(guān)于C語言 bind()函數(shù)案例詳解的文章就介紹到這了,更多相關(guān)C語言 bind()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++類成員函數(shù)后面加const問題

    C++類成員函數(shù)后面加const問題

    這篇文章主要介紹了C++類成員函數(shù)后面加const問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 利用C語言如何實(shí)現(xiàn)一些簡單圖形的打印

    利用C語言如何實(shí)現(xiàn)一些簡單圖形的打印

    這篇文章主要給大家介紹了關(guān)于利用C語言如何實(shí)現(xiàn)一些簡單圖形的打印的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C++實(shí)現(xiàn)判斷字符串是否回文實(shí)例解析

    C++實(shí)現(xiàn)判斷字符串是否回文實(shí)例解析

    這篇文章主要介紹了C++實(shí)現(xiàn)判斷字符串是否回文,其中采用了數(shù)據(jù)結(jié)構(gòu)中棧以及過濾字符等技術(shù),,需要的朋友可以參考下
    2014-07-07
  • Opencv開發(fā)實(shí)現(xiàn)拼圖游戲

    Opencv開發(fā)實(shí)現(xiàn)拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了Opencv開發(fā)實(shí)現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • c++如何將一個(gè)char轉(zhuǎn)化為string

    c++如何將一個(gè)char轉(zhuǎn)化為string

    這篇文章主要介紹了c++如何將一個(gè)char轉(zhuǎn)化為string問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)

    C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言中循環(huán)語句練習(xí)實(shí)例

    C語言中循環(huán)語句練習(xí)實(shí)例

    大家好,本篇文章主要講的是C語言中循環(huán)語句練習(xí)實(shí)例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C語言實(shí)現(xiàn)導(dǎo)航功能

    C語言實(shí)現(xiàn)導(dǎo)航功能

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)導(dǎo)航功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言實(shí)現(xiàn)的一個(gè)萬年歷小程序

    C語言實(shí)現(xiàn)的一個(gè)萬年歷小程序

    這篇文章主要介紹了C語言實(shí)現(xiàn)的一個(gè)萬年歷小程序,具有一定的參考價(jià)值,做C語言日期計(jì)算的朋友可以參考下
    2014-07-07
  • C語言實(shí)現(xiàn)數(shù)獨(dú)游戲的求解

    C語言實(shí)現(xiàn)數(shù)獨(dú)游戲的求解

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)數(shù)獨(dú)游戲的求解,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評(píng)論