tcp/ip統一規定使用大尾方式傳輸資料,即網路位元組序
intel/amd的計算機一般都是小尾方式儲存資料
所以當計算機想通過網路傳輸一串資料給另一台計算機時, 都會經歷如下過程的轉換
1. inet_addr是把由小數點分割的ip位址字串轉成由32位二進位制表示的網路位元組序ip位址
ip字串 => 32位網路位元組序ip
原型如下:
2. inet_ntoa是把32位二進位制表示的網路位元組序ip位址轉成由小數點分割的ip位址字串,是inet_addr的逆過程
32位網路位元組序ip=> ip字串
原型如下:
這四個函式用於主機位元組序和網路位元組序之間的相互轉換
h代表主機位元組序即小尾方式
n代表網路位元組序即大尾方式
to代表轉換
s代表short,即16位(x86)
l代表long,即32位(x86)
舉乙個例子, htons。根據上面, 意思就是把16位的主機位元組序轉成網路位元組序
除winsock外需要包含如下標頭檔案:
#include #pragma comment(lib, "iphlpapi")
bool
getmacandotherinfo()
; tchar szipaddr[16] = ;
tchar szsubnetmask[32] = ;
tchar szgateway[16] = ;
struct in_addr stip = ;
bool fok = false;
do if (null != pstadapterinfo)
// 獲取子網掩碼, 這裡其實沒必要進行這一步轉換,只是為了演示inet_addr和inet_ntoa的用法
stip.s_un.s_addr = inet_addr(pstadapterinfo->ipaddresslist.ipmask.string);
memcpy(szsubnetmask, inet_ntoa(stip), sizeof(szsubnetmask));
// 獲取閘道器位址
stip.s_un.s_addr = inet_addr(pstadapterinfo->gatewaylist.ipaddress.string);
memcpy(szgateway, inet_ntoa(stip), sizeof(szgateway));
_tprintf(text("ip: %s\nmac: %02x-%02x-%02x-%02x-%02x-%02x\nsubnet mask: %s\ngateway: %s\n\n"),
szipaddr, szmacaddr[0], szmacaddr[1], szmacaddr[2], szmacaddr[3], szmacaddr[4],
szmacaddr[5], szsubnetmask, szgateway);
pstadapterinfo = pstadapterinfo->next;
}fok = true;
} } while (false);
return(fok);
}
其中主要使用了getadaptersinfo函式,來看一下原型:
看一下ip_adapter_info結構:
一般基於tcp的winsock程式設計,其特點是可靠,面向連線的協議,流程如下:
winsock2提供了wsasocket來建立套接字,其引數更多。
如果程式不關心所使用的位址可以直接指定inaddr_any並指定埠為0。則程式執行時系統會為應用程式分配乙個1024~5000之間的唯一埠號
注意listen函式只用在支援連線的套接字上,如果監聽套接字數量已經到達上限,呼叫wsagetlasterror()會獲得wsaeconnrefused錯誤
例子可以檢視: tcp/udp套接字程式設計實現
(完)
Winsock程式設計入門 1
一 簡單的tcp伺服器 介紹 winsock api是一套供microsoft windows作業系統使用的套接字程式庫,它最初基於berkeley套接字,但是其中加入了一些microsoft的特殊改動。在這篇文章中,我要試著給你介紹如何使用winsock來進行套接字程式設計,並假設你沒有在任何作業...
Winsock程式設計基礎1
1 載入和釋放winsoke庫 所有winsock函式都是從ws2 32.dll匯出,包含相應庫檔案 include pragma comment lib,ws2 32 若沒有載入,呼叫scok函式返回的socket error出錯 為wsanotinitialised intwsastartup ...
WinSock網路程式設計基礎(1)
記錄學習windows網路程式設計過程中遇到的問題和相關筆記 socket起源於unix,socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。基於 開啟 讀 寫 關閉 模式,其中winsock就是變種之一 以下是乙個典型的c s中使用套接字介面的概述 winsock是wind...