最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

bind()函數(shù)介紹

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

函數(shù)原型

       bind()函數(shù)將長(zhǎng)度為addlen的struct sockadd類型的參數(shù)my_addr與sockfd綁定在一起,將sockfd綁定到某個(gè)端口上,如果使用connect()函數(shù)則沒(méi)有綁定的必要。綁定的函數(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)的長(zhǎng)度,可以設(shè)置成sizeof(struct sockaddr)。使用sizeof(struct sockaddr)來(lái)設(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 地址長(zhǎng)度錯(cuò)誤,或者socket不是AF_UNIX族 UNIX協(xié)議族,AF_UNIX
ELOOP 解析my_addr時(shí)符號(hào)鏈接過(guò)多 UNIX協(xié)議族,AF_UNIX
ENAMETOOLONG my_addr過(guò)長(zhǎng) 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ā)送及處理過(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)閉套接字文件描述符
}

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

相關(guān)文章

  • C++簡(jiǎn)明分析講解引用與函數(shù)提高及重載

    C++簡(jiǎn)明分析講解引用與函數(shù)提高及重載

    今天繼續(xù)開(kāi)始對(duì)C++核心編程知識(shí)的分享與系統(tǒng)講解,第一,這里會(huì)提到“引用”方法傳參以及剖析引用的本質(zhì);第二,我們對(duì)函數(shù)來(lái)一個(gè)提高,相當(dāng)于進(jìn)階函數(shù)了,包括函數(shù)的默認(rèn)值,簡(jiǎn)單的提一下函數(shù)的占位參數(shù),函數(shù)重載以及注意事項(xiàng),接下來(lái)上正文
    2022-05-05
  • C++?using?編譯指令與名稱沖突問(wèn)題

    C++?using?編譯指令與名稱沖突問(wèn)題

    using?編譯指令由名稱空間名和它前面的關(guān)鍵字?using?namespace?組成,它使名稱空間中的所有名稱都可用,而不需要使用作用域解析運(yùn)算符,這篇文章主要介紹了C++?using?編譯指令與名稱沖突,需要的朋友可以參考下
    2022-11-11
  • C++第三方庫(kù)jsoncpp超詳細(xì)講解

    C++第三方庫(kù)jsoncpp超詳細(xì)講解

    這篇文章主要介紹了C++第三方庫(kù)jsoncpp的相關(guān)資料,JSONcpp是一個(gè)在C++中用于處理JSON數(shù)據(jù)的庫(kù),支持JSON格式的序列化和反序列化,通過(guò)JSONcpp,可以輕松地將數(shù)據(jù)對(duì)象組織成JSON格式的字符串,需要的朋友可以參考下
    2024-10-10
  • C++?Protobuf的學(xué)習(xí)使用指南

    C++?Protobuf的學(xué)習(xí)使用指南

    protocol?buffers是一種語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)的方法,它可用于(數(shù)據(jù))通信協(xié)議、數(shù)據(jù)存儲(chǔ)等,下面就來(lái)跟隨小編一起簡(jiǎn)單學(xué)習(xí)一下它的使用吧
    2023-07-07
  • 詳解如何用C++寫(xiě)一個(gè)日期計(jì)算器

    詳解如何用C++寫(xiě)一個(gè)日期計(jì)算器

    寫(xiě)一個(gè)日期計(jì)算器是一個(gè)很有現(xiàn)實(shí)意義的,比如,我想弄一個(gè)倒計(jì)時(shí)或者你女朋友問(wèn)你和她認(rèn)識(shí)多少天了,這就需要讓兩個(gè)日期相減,又或者和別人約定幾年以后怎么怎么樣,這就得知道那一天的日期,接下來(lái)小編借給大家介紹一下如何用C++寫(xiě)一個(gè)日期計(jì)算器,感興趣的朋友可以動(dòng)手嘗試
    2024-04-04
  • c語(yǔ)言求兩個(gè)字符串的交集

    c語(yǔ)言求兩個(gè)字符串的交集

    大家好,本篇文章主要講的是c語(yǔ)言求兩個(gè)字符串的交集,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++虛函數(shù)表實(shí)例分析

    C++虛函數(shù)表實(shí)例分析

    這篇文章主要介紹了C++虛函數(shù)表,對(duì)多態(tài)中用到的虛函數(shù)表進(jìn)行了比較通俗的實(shí)例分析,需要的朋友可以參考下
    2014-09-09
  • C 語(yǔ)言基礎(chǔ)----詳解C中的運(yùn)算符

    C 語(yǔ)言基礎(chǔ)----詳解C中的運(yùn)算符

    這篇文章主要介紹了C語(yǔ)言中的運(yùn)算符,文中講解非常詳細(xì),適合初學(xué)小白進(jìn)行學(xué)習(xí),想入門(mén)C語(yǔ)言的朋友不妨了解下
    2020-06-06
  • 去掉vs2010中ipch文件和.sdf文件的解決方法

    去掉vs2010中ipch文件和.sdf文件的解決方法

    本篇文章介紹了,在vs2010中產(chǎn)生的ipch文件和.sdf文件的解決方法。需要的朋友參考下
    2013-05-05
  • C語(yǔ)言實(shí)現(xiàn)鏈隊(duì)列

    C語(yǔ)言實(shí)現(xiàn)鏈隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)鏈隊(duì)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評(píng)論

小金县| 瑞金市| 边坝县| 瑞丽市| 香河县| 山阴县| 龙江县| 高雄县| 惠水县| 阳泉市| 错那县| 洪洞县| 青海省| 南郑县| 弥渡县| 揭西县| 凤翔县| 大冶市| 永德县| 西城区| 仪征市| 富阳市| 南充市| 枣强县| 渑池县| 定西市| 萨迦县| 巴林左旗| 三穗县| 佳木斯市| 扶风县| 绥江县| 内黄县| 扬中市| 土默特左旗| 安庆市| 密云县| 宁国市| 榆中县| 南宫市| 广饶县|