[Linux網路編程學習筆記]通訊端地址結構

來源:互聯網
上載者:User

好久沒有看那Linux網路編程這本書了,今天看到了重點部分—TCP通訊端。下面先來看看通訊端的地址結構

Linux系統的通訊端可以支援多種協議,每種不同的協議都是用不同的地址結構。在標頭檔<linux/socket.h>中有一個這樣的老式結構(現在一般不使用這個結夠了)。

struct sockaddr

{

    unsigned short  sa_family;  //通訊端的協議簇地址類型,TCP/IP協議對於IPv4地址類型為AF_INET

    char            sa_data[14];//儲存具體的協議地址

};

現在一般使用下面這個sockaddr_in結構(用來設定/擷取地址資訊):

struct sockaddr_in

{

    unsigned short sin_len;      //IPv4地址長度

    short int      sin_family;   //指代協議簇,在TCP通訊端編程只能是AF_INET

    unsigned short sin_port;     //儲存連接埠號碼(使用網路位元組順序),資料類型是一個16為的無符號整形類型

    struct         in_addr sin_addr;//儲存IP地址,IP地址是一個in_add結構體(結構在下面)

    unsigned char  sin_zero[8];     //為了讓sockaddr與sockaddr_in兩個資料結構保持大小相同而保留的空位元組

};

其中,in_addr這個資料結構:

struct in_addr

{

    unsigned long s_addr;   //按照網路位元組順序儲存IP地址

};

在現在很火的IPv6中通訊端地址結構使用了下面這個結構體(結構中的成員是有序排列的):

#DEFINE SIN6_LEN

struct sockaddr_in6

{

    unsigned short int       sin6_len;   //IPv6結構長度,是一個無符號的8為整數,表示128為IPv6地址長度

short int sin6_family; //地址類型AF_INET6

unsigned short int sin6_port; //儲存連接埠號碼,按網路位元組順序

    unsigned short int       sin6_flowinfo;  //低24位是流量標號,然後是4位的優先順序標誌,剩下四位保留

    struct in6_addr          sin6_addr;      //IPv6地址,網路位元組順序

};

struct in6_addr

{

     unsigned long s6_addr;  //128位的IPv6地址,網路位元組順序

};

好了,看個例子更好說明這些結構體的應用,下面以IPv4為例:

struct sockaddr_in mysock;

mysock.sin_family = AF_INET;  //TCP地址結構

mysock.sin_port = htons(3490); //位元組順序轉換函式(後面我會介紹的)

mysock.sin_addr.s_addr = inet_addr("166.111.160.10");//設定IP地址

bzero(&(mysock.sin_zero),8);//設定sin_zero為8位保留位元組

//如果mysock.sin_addr.s_addr = INADDR_ANY,則不指定IP地址(用於server程式)

一些基本的函數:

IP地址轉換函式:inet_addr()和inet_ntoa()

格式:

unsigned long inet_addr(const char *cp);

char* inet_ntoa(struct in_addr in);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.