socket網路程式設計

2021-06-04 00:10:06 字數 1491 閱讀 5934

首先認識乙個表示主機資訊的結構體:

struct hostent

h_addrtype 這是表示主機所使用的位址型別的定義,在c語言winsock2.h標頭檔案中以「af_」開頭的巨集定義就是它的值。如果使用的是ipv4,則值為」af_inet」,如果是ipv6,值為「af_inet4」。

h_length 位址的長度,一般都用ipv4中,所以都是32位/4位元組。

h_addr_list 在乙個主機名中,往往有很多對應的ip位址。當我們通過使用主機名查ip時,就會把返回的所有ip位址儲存在主機位址表中。我們一般使用h_addr來取得第乙個位址就行了。

在c語言的socket網路程式設計中,我們使用gethostbyname()函式來獲取主機資訊,它的函式原型如下:

struct hostent* gethostbyname(const char* hostname );

hostname是個包含主機名/網域名稱的字串,函式通過給定的主機名,返回乙個包含主機名稱和主機位址資訊的指標結構體。

in_addr 是乙個用來表示32位ipv4網路位址的結構體,s_addr是個使用unsigned long資料格式來表示乙個ipv4 位址的結構成員。

inet_ntoa() 將指定的網路位址轉換成 以點隔字串表示的ipv4位址,例如「192.168.1.101」就是個點隔字串網路位址。

//函式原型

char* inet_ntoa( struct in_addr);

通過以上方法,以後就可以直接使用主機名/網域名稱來獲取ipv4位址,而再不用人工去查詢。

下面是關於本期講解內容的總結的源**:

#include

#include

//通過改變以下巨集定義來修改要解析的主機名

#define hostname "www.dingguofeng.com"

int main( int argc , char* argv)

//獲取主機資訊

host = gethostbyname( hostname );

if( host == null )

addr.s_addr = *(unsigned long * )host->h_addr;

printf("主機名 :%s\n" , host->h_name);

wsacleanup();

return 0;

}

網路程式設計 Socket程式設計

一 網路部分 1.ip 2.埠號 在網路協議中使用埠號識別主機上不同的程序,不同的埠對應於不同的服務 應用程式 3.協議 tcp二 socket部門socket通訊基本流程圖 根據socket通訊基本流程圖,總結通訊的基本步驟 伺服器端 第一步 建立乙個用於監聽連線的socket對像 第二步 用指定...

Socket網路程式設計

socket 網路程式設計 在c free中建立乙個對話方塊工程,取名socket1,建立如下檔案結構 main.h ifndef main h define main h include bool winapi main proc hwnd hwnd,uint umsg,wparam wparam...

Socket網路程式設計

類似於 呼叫過程 打 雙方 a,b 相當於2個互相通訊的應用程式,機相當於申請的socket,號碼就是ip位址,雙方通話過程相當於先通過ip連線,然後a向b的socket傳送資料和b從a的socket接收資料,通話結束後,一方結束通話相當於關閉socket,撤銷鏈結。2.socket型別 流式soc...