wchar_t *buf = new wchar_t(15);
u_long a = 1955339436;
BYTE *cp = (BYTE *)&a;
(void) swprintf(buf, L"%u.%u.%u.%u", cp[0], cp[1], cp[2], cp[3]);
//獲取主機的信息
LPHOSTENT hostEntry;
char hostname[MAX_NUM_BUF];
gethostname(hostname,MAX_NUM_BUF); //獲取主機名稱
hostEntry = gethostbyname(hostname); //獲取主機信息
if(!hostEntry)
{
ShowErrorMsg(); //顯示錯誤信息
return ExitClient(CLIENT_API_ERROR); //退出
}
//設置sockaddr_in
SOCKADDR_IN addrServ;
addrServ.sin_family = AF_INET;
addrServ.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
addrServ.sin_port = htons(SERVERPORT);
//客戶端地址設置
四、幾個需要注意的函數
(1)IP地址相關,inet_addr()和inet_ntoa()
用法:inet_addr(“127.0.0.1”);將點分十進制記的IP地址轉換成爲網絡字節序的S_addr類型的IP地址
inet_ntoa(addrClient.sin_addr);將網絡字節序的S_addr類型的IP地址轉換成爲點分十進制記的IP地址
(2)端口號相關,htonl()和htons()
用法:htonl(INADDR_ANY);把一個u_long類型的值從主機字節序轉換成爲TCP/IP網絡字節順序
htons(6000);把一個u_short類型的值從主機字節序轉換成爲TCP/IP網絡字節順序
INADDR_ANY這個宏的值就是0,轉換之後仍然是0
1 爲了標識通信實體中進行通信的進程(應用程序),TCP/IP協議提出了協議端口的概念
2. 端口是一種抽象的軟件結構(包括一些數據結構和I/O緩衝區)。應用程序通過系統調用和某端口建立連接(binding)後,傳輸層傳給該端口的數據都被相應的進程所接收,相應進程發給傳輸層的數據都通過該端口輸出
3. 端口用一個整數型標識符來表示,即端口號。端口號跟協議相關,TCP/IP傳輸層的兩個協議TCP和UDP是完全獨立的的兩個軟件模塊,因此各自的端口號也相互獨立