WinSock網路程式設計筆記 獲得本地IP位址

2021-10-03 08:40:11 字數 2046 閱讀 1084

每次寫網路程式都必須編寫**載入和釋放winsock庫,為了以後方便使用,我們將封裝乙個cinitsock類來管理winsock庫:

// initsock.**件

#include #pragma comment(lib, "ws2_32") // 鏈結到ws2_32.lib

class cinitsock

} ~cinitsock()

};

#include"../common/initsock.h" //新增該標頭檔案

#include#includeusing namespace std;

cinitsock initsock; //初始化

int main()

cout << "當前主機名為: " << hostname << endl;

hostent *phost = ::gethostbyname(hostname);//是host entry的縮寫,該結構記錄主機的資訊,包括主機名、別名、位址型別、位址長度和位址列表。之所以主機的位址是乙個列表的形式,原因是當乙個主機有多個網路介面時,自然有多個位址。

for (int i = 0;; i++)

memcpy(&addr.s_un.s_addr, p, phost->h_length);//由p指向位址為起始位址的連續phost->h_length個位元組的資料複製到以addr.s_un.s_addr指向位址為起始位址的空間內。

char *ip = ::inet_ntoa(addr); //將網路位址轉換成「.」點隔的字串格式

cout << "本機ip位址為: " << ip << endl; }

}

gethostname()   

返回本地主機的標準主機名。

int pascal far gethostname(char far *name, int namelen);   

name: 乙個指向將要存放主機名的緩衝區指標。   

namelen:緩衝區的長度。

hostent      是host entry的縮寫,該結構記錄主機的資訊,包括主機名、別名、位址型別、位址長度和位址列表。之所以主機的位址是乙個列表的形式,原因是當乙個主機有多個網路介面時,自然有多個位址。

#define h_addr h_addr_list[0] h_addr_list中的第一位址。

struct hostent ;

memcpy

extern void *memcpy(void *destin, void *source, unsigned n);

由source指向位址為起始位址的連續n個位元組的資料複製到以destin指向位址為起始位址的空間內。

inet_ntoa()    功能是將網路位址轉換成「.」點隔的字串格式。

函式原型: char far* pascal far inet_ntoa( struct in_addr in);

msdn上本函式的原型描述為:unsigned long inet_addr( __in const char *cp);

注釋:本函式將乙個用in引數所表示的internet位址結構轉換成以「.」 間隔的諸如「a.b.c.d」的字串形式。請注意inet_ntoa()返回的字串存放在windows套介面實現所分配的記憶體中。應用程式不應假設該記憶體是如何分配的。在同乙個執行緒的下乙個windows套介面呼叫前,資料將保證是有效。

返回值:

若無錯誤發生,inet_ntoa()返回乙個字元指標。否則的話,返回null。其中的資料應在下乙個windows套介面呼叫前複製出來。

struct   in_addr的定義如下:

struct   in_addr  s_un_b;   

struct    s_un_w;    

unsigned long  s_addr;  

} s_un;

};

參考部落格:

Winsock程式設計筆記 1

tcp ip統一規定使用大尾方式傳輸資料,即網路位元組序 intel amd的計算機一般都是小尾方式儲存資料 所以當計算機想通過網路傳輸一串資料給另一台計算機時,都會經歷如下過程的轉換 1.inet addr是把由小數點分割的ip位址字串轉成由32位二進位制表示的網路位元組序ip位址 ip字串 32...

winSock網路程式設計初體驗

在windows下進行tcp的socket程式設計主要有以下步驟 1.初始化wsa winsock word wversionrequested wsadata wsadata wversionrequested makeword 2,0 if wsastartup wversionrequeste...

WinSock網路程式設計基礎(1)

記錄學習windows網路程式設計過程中遇到的問題和相關筆記 socket起源於unix,socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。基於 開啟 讀 寫 關閉 模式,其中winsock就是變種之一 以下是乙個典型的c s中使用套接字介面的概述 winsock是wind...