Linux 網絡編程詳解一(IP套接字結構體、網絡字節序,地址轉換函數)

IPv4套接字地址結構
struct sockaddr_in
{uint8_t sinlen;(4個字節)sa_family_t sin_family;(4個字節)in_port_t sin_port;(2個字節)struct in_addr sin_addr;(4個字節)char sin_zero[8];
};
sin_len:整個sockaddr_in結構體的長度,部分Linux內核版本沒有該成員
sin_family:指定該地址家族,一般設置為AF_INET(使用TCP,UDP協議)
sin_port:端口
sin_addr:IPv4的地址
sin_zero:暫不使用,一般將其設置為0通用地址結構
struct sockaddr
{uint8_t sin_len;(4個字節)sa_family_t sin_family;(4個字節)char sa_data[14];
};
sin_len:整個sockaddr結構的長度
sin_family:指定該地址家族
sa_data:由sin_family決定它的形式結論:struct sockaddr_in與struct sockaddr結構大小相同
字節序
大端字節序
--最高有效位存儲與最低內存地址處,最低有效位存儲于最高內存地址處小端字節序
--最高有效位存儲于最高內存地址處,最低有效位存儲于最低內存地址處主機字節序
--不同主機有不同的字節序,如x86小端字節序,,Motorola 6800為大端字節序網絡字節序
--網絡字節序規定為大端字節序字節序說明:一個int類型變量254存儲在內存中,如果變量的百位存儲于內存地址條上的低地址處,
個位存儲于內存地址條上的高地址處(即變量存儲序列和內存地址序列相反)這就是大端字節序,反之則是小端字節序。
各個主機的字節序是不同的,但是在網絡中傳輸,必須要一個統一的字節序,這就是網絡字節序。
字節序轉換函數
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
說明:在上述函數中,h代表host;n代表networks;s代表short;l代表long。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <arpa/inet.h>int main(int arg, char *args[])
{unsigned int data = 0x12345678;char *p = (char *)&data;printf("%x,%x,%x,%x\n", p[0], p[1], p[2], p[3]);/** 對于數組而言,內存地址一定是遞增的,p[0]=*(p+0);p[1]=*(p+1);* 如果data變量的最低有效位處于p+0這個低內存地址位,說明這是小端字節序* */if (p[0] == 0x78){printf("主機是小端字節序\n");} else{printf("主機是大端字節序\n");}//字節序轉換函數uint32_t ndata = htonl(data);p = (char *)&ndata;printf("%x,%x,%x,%x\n", p[0], p[1], p[2], p[3]);if (p[0] == 0x78){printf("網絡字節序是小端字節序\n");} else{printf("網絡字節序是大端字節序\n");}return 0;
}
地址轉換函數
typedef uint32_t in_addr_t;
struct in_addr {in_addr_t s_addr;
};int inet_aton(const char *p,struct in_addr *inp);
將點分十進制(192.168.1.116)轉化成struct in_addrin_addr_t inet_addr(const char * cp);
將點分十進制轉化成32bitchar *inet_ntoa(struct in_addr in);//注意:這里參數是結構體變量,而非結構體指針
將struct結構體變量轉化成點分十進制
inet_ntoa()返回值是char *,這個char *的內存空間是在inet_ntoa()函數中靜態分配的,因此inet_ntoa()后面的調用會覆蓋上一次調用,inet_ntoa()是線程不安全函數
套接字類型
1.流式套接字(SOCK_STREAM)
--提供面向連接的,可靠的數據傳輸服務,數據無差錯,無重復的發送,且按發送順序接收。
2.數據報式套接字(SOCK_DGRAM)
--提供無連接服務,不提供無錯保證,數據可能丟失或重復,并且接收順序混亂。
3.原始套接字(SOCK_RAW)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457481.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

地籍cad的lisp程序大集合_AutoCAD-LISP程序100例

{:soso_e179:}AutoCAD-LISP程序100例.JPG (143.82 KB, 下載次數: 28)2011-10-18 14:42 上傳有說明很好&#xff01;頂如果您使用 AutoCAD,下面的內容對您一定有幫助。在某些方面能大大提高您的工作效率。下面的程序均以源程序方式給出&#xff0c;您可以使用、參考、修改它。bg…

javascript中數組的22種方法

前面的話數組總共有22種方法&#xff0c;本文將其分為對象繼承方法、數組轉換方法、棧和隊列方法、數組排序方法、數組拼接方法、創建子數組方法、數組刪改方法、數組位置方法、數組歸并方法和數組迭代方法共10類來進行詳細介紹對象繼承方法數組是一種特殊的對象&#xff0c;繼…

javascript/jquery高度寬度詳情解說分析

為什么80%的碼農都做不了架構師&#xff1f;>>> 一、window對象表示瀏覽器中打開的窗口 二、window對象可以省略 一、document對象是window對象的一部分 二、瀏覽器的HTML文檔成為Document對象 window.location和document.location window對象的location屬性引用的…

農用地包括哪些地類_土地地類一覽表

一級類二級類三級類含義編號三大類名稱編號名稱編號名稱1農用地指直接用于農業生產的土地&#xff0c;包括耕地&#xff0c;園地&#xff0c;林地&#xff0c;牧草地及其他的農業用地11耕地指種植農作物、土地&#xff0c;包括熟地、新開發復墾整理地&#xff0c;休閑地、輪歇地…

紅黑樹插入時的自平衡

紅黑樹插入時的自平衡 紅黑樹實質上是一棵自平衡的二叉查找樹&#xff0c;引入帶顏色的節點也是為了方便在進行插入或刪除操作時&#xff0c;如果破壞了二叉查找樹的平衡性能通過一系列變換保持平衡。 紅黑樹的性質 每個節點要么是紅色&#xff0c;要么是黑色根節點必須是黑…

說一下自己對于 Linux 哲學的理解

查閱了一些資料&#xff0c;官方的哲學思想貌似是&#xff1a; 一切皆文件由眾多單一目的的小程序&#xff0c;一個程序只實現一個功能&#xff0c;多個程序組合完成復雜任務文本文件保存配置信息盡量避免與用戶交互什么&#xff0c;你問我的理解&#xff1f;哲學思想&#xff…

UWP學習記錄

微軟{X:Bind}、{Binding}資料網站 &#xff1a; https://msdn.microsoft.com/windows/uwp/xaml-platform/x-bind-markup-extension在View的ItemTemplate中綁定ViewModel的方法&#xff1a;1 <ItemsControl Name"XX" ItemsSource"{x:Bind VM.XXModels,ModeOne…

dw1000信標碼_DW1000方案工牌型UWB標簽,助力10厘米高精度室內定位!

DW1000方案工牌型UWB標簽&#xff0c;助力10厘米高精度室內定位&#xff01;發布日期&#xff1a;2019-04-01 瀏覽次數&#xff1a;244次微能信息(95power)推出一款工牌型UWB標簽VDU1510 &#xff0c;廣泛應用于超寬帶UWB定位系統&#xff0c;最高可實現10cm高精度人員定位。工…

【Java】HashMap源碼(1.7)

Life is not a ridiculous number of life, the meaning of life lies in life itself HashMap源碼 散列集 數組和鏈表可以保持元素插入的順序&#xff0c;對數組來說&#xff0c;他的優點是擁有連續的存儲空間&#xff0c;因此可以使用元素下標快速訪問&#xff0c;但缺點在…

Docker 基本用法

1.安裝&#xff1a; wget http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm rpm -ivh epel-release-6-8.noarch.rpm yum install docker-io -y2.獲取鏡像 pull docker pull ubuntu docker pull ubuntu:14.043.運行這個鏡像&#xff0c;在其中運行bash應用…

畫刷的使用

1.畫刷的定義&#xff1a; HBRUSH hBrush; windows 自定義的畫刷&#xff1a; WHITE_BRUSH、LTGRAY_BRUSH、GRAY_BRUSH、DKGRAY_BRUSH、BLACK_BRUSH和NULL_BRUSH &#xff08;也叫HOLLOW_BRUSH&#xff09; 獲取方法如下&#xff1a; hBrush (HBRUSH) GetStockObject (GRAY_BR…

dataframe 控對象_iOS知識 - 常用小技巧大雜燴

1&#xff0c;打印View所有子視圖po [[self view]recursiveDescription]2&#xff0c;layoutSubviews調用的調用時機* 當視圖第一次顯示的時候會被調用。* 添加子視圖也會調用這個方法。* 當本視圖的大小發生改變的時候是會調用的。* 當子視圖的frame發生改變的時候是會調用的。…

【Java】jdk 1.8 新特性——Lambda表達式

Lambda表達式 jdk 1.8 新加入的特性&#xff0c;簡化了簡單接口的實現 函數式接口 函數式中只有一個待實現的方法&#xff0c;可以使用FunctionalInterface注解標注函數式接口.這個接口中只能有一個待實現的方法&#xff0c;但可以包含默認方法&#xff0c;靜態方法以及Obje…

【Todo】Java8新特性學習

參考這篇文章吧&#xff1a; http://blog.csdn.net/vchen_hao/article/details/53301073 還有一個系列轉載于:https://www.cnblogs.com/charlesblc/p/6123380.html

jsp調整字體大小font_html font標簽如何設置字體大小?

首先我們先來看看htmlfont標簽是如何來設置字體大小的&#xff1a;都只到htmlfont標簽是個專門用來設置字體的標簽&#xff0c;雖然在html5中用的會很少(因為都用css樣式來設置font標簽里面的屬性)&#xff0c;但是個人覺得font標簽還是相當強大的標簽的&#xff0c;為什么這么…

runtime官方文檔

OC是一種面向對象的動態語言&#xff0c;作為初學者可能大多數人對面向對象這個概念理解的比較深&#xff0c;而對OC是動態語言這一特性了解的比較少。那么什么是動態語言&#xff1f;動態語言就是在運行時來執行靜態語言的編譯鏈接的工作。這就要求除了編譯器之外還要有一種運…

【Java】synchronized關鍵字筆記

Java Synchronized 關鍵字 壹. Java并發編程存在的問題 1. 可見性問題 可見性問題是指一個線程不能立刻拿到另外一個線程對共享變量的修改的結果。 如&#xff1a; package Note.concurrency;public class Demo07 {private static boolean s true;public static void mai…

sql語句分析是否走索引_MySql 的SQL執行計劃查看,判斷是否走索引

在select窗口中&#xff0c;執行以下語句&#xff1a;set profiling 1; -- 打開profile分析工具show variables like %profil%; -- 查看是否生效show processlist; -- 查看進程use cmc; -- 選擇數據庫show PROFILE all; -- 全部分析的類型show index from t_log_account; ##查看…

SQL Server-數據類型(七)

前言 前面幾篇文章我們講解了索引有關知識&#xff0c;這一節我們再繼續我們下面內容講解&#xff0c;簡短的內容&#xff0c;深入的理解&#xff0c;Always to review the basics。 數據類型 SQL Server支持兩種字符數據類型&#xff0c;一種是常規&#xff0c;另外一種則是Un…

【隨記】SQL Server連接字符串參數說明

廢話不多說&#xff0c;請參見 SqlConnection.ConnectionString 。 轉載于:https://www.cnblogs.com/xiesong/p/5749037.html