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

Linux C中sockaddr和sockaddr_in的區(qū)別

 更新時間:2017年07月05日 10:50:06   投稿:lqh  
這篇文章主要介紹了Linux C中sockaddr和sockaddr_in的區(qū)別的相關資料,需要的朋友可以參考下

Linux C中sockaddr和sockaddr_in的區(qū)別

struct sockaddr和struct sockaddr_in這兩個結構體用來處理網絡通信的地址。

在各種系統(tǒng)調用或者函數中,只要和網絡地址打交道,就得用到這兩個結構體。

網絡中的地址包含3個方面的屬性:

1 地址類型: ipv4還是ipv6
2 ip地址
3 端口

相應的,頭文件有如下定義:

include <netinet/in.h> 
 
struct sockaddr { 
  unsigned short  sa_family;  // 2 bytes address family, AF_xxx 
  char       sa_data[14];   // 14 bytes of protocol address 
}; 
 
// IPv4 AF_INET sockets: 
 
struct sockaddr_in { 
  short      sin_family;    // 2 bytes e.g. AF_INET, AF_INET6 
  unsigned short  sin_port;  // 2 bytes e.g. htons(3490) 
  struct in_addr  sin_addr;   // 4 bytes see struct in_addr, below 
  char       sin_zero[8];   // 8 bytes zero this if you want to 
}; 
 
struct in_addr { 
  unsigned long s_addr;     // 4 bytes load with inet_pton() 
}; 

注釋中標明了屬性的含義及其字節(jié)大小,這兩個結構體一樣大,都是16個字節(jié),而且都有family屬性,不同的是:

sockaddr用其余14個字節(jié)來表示sa_data,而sockaddr_in把14個字節(jié)拆分成sin_port, sin_addr和sin_zero分別表示端口、ip地址。sin_zero用來填充字節(jié)使sockaddr_in和sockaddr保持一樣大小。

sockaddr和sockaddr_in包含的數據都是一樣的,但他們在使用上有區(qū)別:

程序員不應操作sockaddr,sockaddr是給操作系統(tǒng)用的

程序員應使用sockaddr_in來表示地址,sockaddr_in區(qū)分了地址和端口,使用更方便。 

一般的用法為:

程序員把類型、ip地址、端口填充sockaddr_in結構體,然后強制轉換成sockaddr,作為參數傳遞給系統(tǒng)調用函數

網絡編程中一段典型的代碼為:

int sockfd; 
struct sockaddr_in servaddr; 
 
sockfd = Socket(AF_INET, SOCK_STREAM, 0); 
 
/* 填充struct sockaddr_in */ 
bzero(&servaddr, sizeof(servaddr)); 
servaddr.sin_family = AF_INET; 
servaddr.sin_port = htons(SERV_PORT); 
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr); 
 
/* 強制轉換成struct sockaddr */ 
connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); 
  



感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Git 創(chuàng)建分支提交遠程分支詳解

    Git 創(chuàng)建分支提交遠程分支詳解

    這篇文章主要介紹了Git 創(chuàng)建分支提交遠程分支詳解的相關資料,需要的朋友可以參考下
    2017-04-04
  • Shell位置變量&預定義變量的實現

    Shell位置變量&預定義變量的實現

    Shell位置變量和預定義變量是Shell腳本編程中非常重要的概念,本文主要介紹了Shell位置變量&預定義變量的實現,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • win10下如何運行.sh文件的實現步驟

    win10下如何運行.sh文件的實現步驟

    這篇文章主要介紹了win10下如何運行.sh文件的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 利用shell獲取指定日期前N天的日期

    利用shell獲取指定日期前N天的日期

    最近因為項目的需要對比2015年10月的數據,因為一年來的數據經過了很多次調整和處理,遇到的最直接的問題是很多數據需要重新計算。只好寫腳本刷數據。在準備腳本的過程中,就需要根據給定的日期處理數據,所以就有了這篇文章,下面有需要的朋友們一起學習學習。
    2016-11-11
  • 又拍云存儲同步腳本

    又拍云存儲同步腳本

    為了可以自動把網站上的css、js以及圖片等靜態(tài)資源放在又拍云存儲上,訪問速度明顯提高不少,下面簡單介紹下實現步驟,需要的朋友可以參考下
    2013-11-11
  • Shell腳本對比兩個文本文件找出不同行的2個方法分享

    Shell腳本對比兩個文本文件找出不同行的2個方法分享

    這篇文章主要介紹了Shell腳本對比兩個文本文件找出不同行的2個方法分享,本文分別使用comm命令法、grep命令法實現,需要的朋友可以參考下
    2014-12-12
  • Obsidian斜杠命令用法詳解

    Obsidian斜杠命令用法詳解

    這篇文章主要介紹了終于定制出順手的Obsidian斜杠命令,利用斜杠命令?+?命令面板置頂?+?Quick?Add插入內容?+?Quick?Add別名命令,就可以根據自己習慣,實現定制化的斜杠命令,需要的朋友可以參考下
    2022-12-12
  • shell腳本自動檢測網絡掉線和自動重連

    shell腳本自動檢測網絡掉線和自動重連

    這篇文章主要介紹了shell腳本自動檢測網絡掉線和自動重連,這篇文章介紹的是自動檢測連接網絡的解決方法,需要的朋友可以參考下
    2019-12-12
  • Shell腳本實現復制文件到多臺服務器的代碼分享

    Shell腳本實現復制文件到多臺服務器的代碼分享

    這篇文章主要介紹了Shell腳本實現復制文件到多臺服務器的代碼分享,用在多機集群環(huán)境中非常方便,需要的朋友可以參考下
    2014-09-09
  • Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結尾)

    Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結尾)

    這篇文章主要介紹了Bash技巧:把變量賦值為換行符,判斷文件是否以換行符結尾,需要的朋友可以參考下
    2020-08-08

最新評論

林口县| 昂仁县| 即墨市| 和田县| 辽阳县| 苏尼特左旗| 青铜峡市| 锡林浩特市| 綦江县| 城固县| 南投县| 奇台县| 洛南县| 呈贡县| 赤壁市| 泉州市| 伊金霍洛旗| 丹江口市| 安化县| 彭泽县| 根河市| 酉阳| 榆中县| 淮阳县| 锦州市| 连山| 阳春市| 湖州市| 石嘴山市| 南昌市| 廊坊市| 万源市| 鱼台县| 环江| 仪征市| 龙里县| 河津市| 施甸县| 尉犁县| 台东县| 屏南县|