首先認識乙個表示主機資訊的結構體:
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...