網路常用的資料結構

2021-07-07 02:33:34 字數 3009 閱讀 3252

套接字相關的資料型別:sockaddr和sockaddr_in;sockaddr用來儲存乙個套接字,定義如下:

struct

sockaddr

;

sockaddr_in的功能與socdaddr相同

struct

sockaddr_in

;

struct

in_addr

;

struct hostent *gethostbyname(const

char *name);

結構體hostent的定義如下:

struct

hostent

用ip位址返回網域名稱:

struct hostent *gethostbyaddr(const

void *addr,socklen_t len,int type);

由協議名取的協議資料:

struct protoent *getprotobyname(char *name);

結構體protoent定義如下:

struct

protoent

由協議編號取得協議資訊:

struct protoent *getprotobynumber(int proto);

取得系統支援的所有協議:

struct protoent *getprotoent(void);

取得系統支援的網路服務:

struct servent *getservent(void);

結構體servent定義如下:

struct

servent

;

用名稱取得系統所支援的服務:

struct servent *getservbyname(char *name,char *proto); //

name:伺服器名稱,proto伺服器所使用的協議;

由埠取得服務名稱:

struct servent *getservbyport(int port,char *proto)

//port是埠的編號,需要注意的是這個埠號需要用htons()函式進行轉換,proto表示乙個協議的字串;

將網路位址轉換成長整型:

long inet_addr(char *cp); //

cp表示乙個ip位址字串;

將長整型ip位址轉換成網路位址即大小端模式轉換:

char *inet_ntoa(struct in_addr in);

int inet_aton(const char *string, struct 

in_addr

*addr);

例如:inet_aton("

127.0.0.1

", &adr_inet.s

in_addr)

inet_pton函式原型如下[將"點分十進位制" -> "整數"]:

int inet_pton(int af, const

char *src, void *dst);

//

這個函式轉換字串到網路位址,第乙個引數af是位址族,轉換後存在dst中

const

char *inet_ntop(int af, const

void *src, char *dst, socklen_t cnt);

//這個函式轉換網路二進位制結構到ascii型別的位址,引數的作用和上面相同,只是多了乙個引數socklen_t cnt,

//他是所指向快取區dst的大小,避免溢位,如果快取區太小無法儲存位址的值,則返回乙個空指標,並將errno置為enospc

例如:
char

ipdotdec[

20];

//存放點分十進位制ip位址

struct in_addr s;  //

ipv4位址結構體

//輸入ip位址

printf("

please input ip address:

"); scanf("

%s", &ipdotdec);

//轉換 inet_pton(af_inet, ipdotdec, (void *)&s);

printf("

inet_pton: 0x%x\n

", s.s_addr); //

注意得到的位元組序

//反轉換 inet_ntop(af_inet, (void *)&s, ipdotdec, 16);

printf("

inet_ntop: %s\n

", ipdotdec);

將計算機中的32位長整型數轉換成網路字元順序的32位長整型數:

uint32_t htonl(uint32_t hostlong);
例如:servaddr.sin_addr.s_addr = htonl(inaddr_any);

將計算機中的16位整型數轉換成網路字元順序的16位整型數:

uint16_t htons(uint16_t hostshort);
例如:servaddr.sin_port = htons(serv_port);

將網路字元順序的32位長整型數轉換成計算機中的32位長整型數:

uint32_t ntohl(uint32_t netlong);

將網路字元順序的16位整型數轉換成計算機中的16位整型數:

uint16_t ntohs(uint16_t netshort);

常用的資料結構

人們常說資料結構,面試的時候也常被問道資料結構相關的問題,到底什麼是資料結構?資料結構是計算機儲存 組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。資料結構在計算機...

常用的資料結構

1.資料元素相互之間的關係稱為結構。2.四類基本結構 集合 線性結構 樹形結構 圖狀結構 1 集合結構 除了同屬於一種型別外,別無其它關係 2 線性結構 元素之間存在一對一關係常見型別有 陣列,鍊錶,佇列,棧,它們之間在操作上有所區別.例如 鍊錶可在任意位置插入或刪除元素,而佇列在隊尾插入元素,隊頭...

常用的資料結構

在程式設計中,為了處理方便,把具有相同型別的若干變數按有序的形式組織起來。這些按序排列的同類資料元素的集合稱為陣列。在c語言中,陣列屬於構造資料型別。乙個陣列可以分解為多個陣列元素,這些陣列元素可以是基本資料型別或是構造型別。因此按陣列元素的型別不同,陣列又可分為數值陣列 字元陣列 指標陣列 結構陣...