網路程式設計裡幾個結構

2021-07-15 10:30:10 字數 1985 閱讀 2972

ip位址結構(注意紅色的語句,經常用到)

struct in_addr s_un_b;

struct s_un_w;

u_long s_addr;

} s_un;//注意,這裡是乙個聯合,通常在用的時候用s_addr,就是下面這個紅色的

#define s_addr  s_un.s_addr

/* can be used for most tcp & ip code */

#define s_host  s_un.s_un_b.s_b2

/* host on imp */

#define s_net   s_un.s_un_b.s_b1

/* network */

#define s_imp   s_un.s_un_w.s_w2

/* imp */

#define s_impno s_un.s_un_b.s_b4

/* imp # */

#define s_lh    s_un.s_un_b.s_b3

/* logical host */

};一起來看下乙個ip位址的記憶體中的樣子(192.168.21.234):192=0xc0  168=0xa8

socket位址結構

struct sockaddr_in ;

struct sockaddr ;

(此資料結構用做bind、connect、recvfrom、sendto等函式的引數,指明位址資訊。

但一般程式設計中並不直接針對此資料結構操作,而是使用與sockaddr等價的資料結構sockaddr_in,在使用的時候用socketaddr_in開闢變數並定義,然後在使用的時候作型別轉換)

pcap_addr位址結構

struct pcap_addr ;

ip位址轉換

unsingned long inet_addr(const char far *p)接受乙個常量ip字串的指標,並返回乙個無符號整型值。發生錯誤時返回-1,和廣播位址255.255.255.255相同,故在賦值之前得先檢查返回值。

例如:sockaddr_in socketaddress;

unsigned long ip = inet_addr("192.168.21.234");

if (ip == -1)

else

char far * inet_ntoa(struct in_addr in) 將ip位址結構轉換成字串型ip位址。

socket 函式

socket socket( int af, int type, int protocol );

應用程式呼叫socket函式來建立乙個能夠進行網路通訊的套接字。

第乙個引數指定應用程式使用的通訊協議的協議族,對於tcp/ip協議族,該引數置af_inet;

第二個引數指定要建立的套接字型別,流套接字型別為sock_stream、資料報套接字型別為sock_dgram、原始套接字sock_raw(winsock介面並不適用某種特定的協議去封裝它,而是由程式自行處理資料報以及協議首部);

第三個引數指定應用程式所使用的通訊協議。

該函式如果呼叫成功就返回新建立的套接字的描述符,如果失敗就返回invalid_socket。套接字描述符是乙個整數型別的值。每個程序的程序空間裡都有乙個套接字描述符表,該表中存放著套接字描述符和套接字資料結構的對應關係。該表中有乙個字段存放新建立的套接字的描述符,另乙個字段存放套接字資料結構的位址,因此根據套接字描述符就可以找到其對應的套接字資料結構。每個程序在自己的程序空間裡都有乙個套接字描述符表但是套接字資料結構都是在作業系統的核心緩衝裡。

網路程式設計的幾個知識點

網路程式設計 1 網路程式設計概述 網路程式設計 socket程式設計 套接字程式設計 2 網路程式設計三要素之ip概述 ip是每台計算機的唯一標識 4個資料段,每個資料段是0 255 ip是以點分十進位制的方式存在的。命令 ipconfig all 檢視ip和mac位址 ping ip 檢視網路是...

網路程式設計中重要的幾個資料結構和函式

struct in addr struct sockaddr in struct in6 addr struct sockaddr in6 struct sockaddr struct sockaddr storage 這兩個是隨ipv6一起出現的新函式,支援ipv4和ipv6,函式名稱中p的意思是...

網路程式設計 套接字結構

每個協議族都定義了自己的套接字結構,這些結構均以sockaddr 開頭,並對應每個協議族自己的唯一字尾 當向任意乙個引數傳遞任何套接字函式時,套接字位址結構總是以引用形式傳遞 網路程式設計資料型別 posix規範 資料型別 說明標頭檔案 int8 t 帶符號8位整數 uint8 t 無符號8位整數 ...