WINSOCK API 學習筆記

 
要想獲得系統中安裝的網絡協議的相關信息,調用這個函數W S A E n u m P r o t o c o l s即可,並像這樣定義它:
int WSAEnumprotocols{
LPINT lpiprotocols,
LPWSAPROCOL_INFO lpprotocolbuffer,
LPDWORD lpdwbufferlength
};
返回的W S A P R O TO C O L _ I N F O結構的格式如下:
typedef struct _WSAPROTOCOL_INFO{
DWORD dwServiceFlags1;
DWORD dwServiceFlags2;
DWORD dwServiceFlags3;
DWORD dwServiceFlags4;
DWORD dwProviderFlags; //建立SOCKET時如果第三個參數爲0時使用的默認傳輸協議
GUID ProviderId;
DWORD dwCatalogEntryId;
WSAPROTOCOLCHAIN ProtocolChain;
int iVersion;
int iAddressFamily; //爲指定協議區分正確的定址結構
int iMaxSockAddr;
int iMinsockAddr;
int iSocketType; //區分協議的多重行爲
int iProtocol;   //定義該條目屬於哪個協議
int iProtocolMaxOffset;
int iNetworkByteOrder;
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
WCHAR szProtocol[WSAPROTOCOL_LEN+1];
}WSAPROTOCOL_INFOW,FAR *LPWSAPROTOCOL_INFOW;
在可以調用一個Wi n s o c k函數之前,必須先加載一個版本正確的Wi n s o c k庫。
int WSAStartup(WORD wVe r s i o n R e q u e s t e d , L P W S A D ATA lpWSAData)
第一個參數是準備加載的Wi n s o c k庫的版本號。就目前的Wi n 3 2平臺而言,Winsock 2庫的最新版本是2 . 2。如果需要
Winsock 2.2版,指定這個值( 0 x 0 2 0 2)或使用宏M A K E W O R D ( 2 , 2 )即可。高位字節指定副版本,而低位字節則指定主版本。
第二個參數是W S A D ATA結構,它是調用完成之後立即返回的。
typedef struct WSAData{
WORD wVersion;
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSocket;
unsigned short iMaxUdpDg;
char FAR* lpVendorInfo;
}WSADATA,FAR* LPWSADATA;
w Ve r s i o n 調用者希望使用的Wi n s o c k版本號
w H i g h Ve r s i o n 加載的Wi n s o c k庫所支持的最高Wi n s o c k版本,通常和w Ve r s i o n的值相同
s z D e s c r i p t i o n 加載的Wi n s o c k庫的文本說明
s z S y s t e m S t a t u s 一個文字串,其中包含相應的狀態或配置信息
i M a x S o c k e t s 套接字的最大編號( Winsock 2或稍後的版本忽略了該字段)
i M a x U d p D g U D P數據報的最大容量( Winsock 2或稍後的版本忽略了該字段)
l p Ve n d o r I n f o 廠商專有信息(Winsock 2 或稍後的版本忽略了該字段)
當不在需要這個庫時的卸載函數爲int WSACleanup (void);
要調用W S A E n u m P r o t o c o l s函數,最簡單的方法是利用相當於N U L L和l p d w B u ff e r L e n g t h的l p P r o t o c o l B u ff e r ,令初次調用爲0 。調用失敗,返回W S A E N O B U F S 錯誤,但l p d w B u ff e r L e n g t h中包含了恰如其分的緩衝區長度(這一長度是返回所有協議信息所需的)。
W S A P R O TO C O L _ I N F O結構最常用的字段是d w S e r v i c e F l a g s 1,它是代表不同協議屬性的一個位字段
X P l _ C O N N E C T I O N L E S S 該協議提供無連接的服務。如果不設,則支持面向連接的數據傳

X P l _ G U A R A N T E E D _ D E L I V E RY 該協議保證發送出去的所有數據都將到達既定接收端
X P l _ G U A R A N T E E D _ O R D E R 保證數據按其發送順序到達接收端,且數據不會重複。但是,該
協議不能保證投遞的準確性
X P l _ M E S S A G E _ O R I E N T E D 實現消息邊界
X P l _ P S E U D O _ S T R E A M 該協議是面向消息的,但接收端會忽略消息邊界
X P l _ G R A C E F U L _ C L O S E 支持二相關閉:通知各個通信方另一方打算關閉通信信道。如果
不設,則只執行失敗關閉
X P l _ E X P E D I T E D _ D ATA 該協議提供緊急數據(帶外數據)
X P l _ C O N N E C T _ D ATA 該協議支持帶有連接請求的數據傳輸
X P l _ D I S C O N N E C T _ D ATA 該協議支持帶有無連接請求的數據傳輸
X P l _ S U P P O RT _ B R O A D C A S T 該協議支持廣播機制
X P l _ S U P P O RT _ M U LT I P O I N T 該協議支持多點或多播機制
X P l _ M U LT I P O I N T _ C O N T R O L _ P L A N E 如果設置了這個協議標誌,就會啓動控制面板。反之,則不啓動
X P l _ M U LT I P O I N T _ D ATA _ P L A N E 如果設置了這個協議標誌,就會啓動數據面板。反之,則不啓動
X P l _ Q O S _ S U P P O RT E D 該協議標誌支持Q o S請求
X P l _ U N I _ S E N D 該協議在發送方向上是單向的
X P l _ U N I _ R E C V 該協議在接收方向上是單向的
X P l _ I F S _ H A N D L E S 提供者返回的套接字描述符是Installable File System(可安裝文件系統)句柄,可用於ReadFile Wr i t e F i l e之類的A P I函數中
X P l _ PA RT I A L _ M E S S A G E W S A S e n d和W S A S e n d To中均支持M S G _ PA RT I A L標誌
套接字有兩種函數可以建立:
SOCKET WSASocket(
int af;
int type;
int protocol;
LPWSAPROTOCOL_INFO lpProtocolInfo;
GROUP g;
DWORD dwFlags;
);
SOCKET socket(
int af;
int type;
int protocol
);
第一個參數a f,是協議的地址家族。。比如,如果想建立一個U D P或T C P套接字,可用常量A F _ I N E T來指代互聯網協議( I P)
第二個參數t y p e,是協議的套接字類型。套接字的類型可以是下面五個值: S O C K _ S T R E A M、S O C K _ D G R A M、S O C K _ S E Q PA C K E T、S O C K _ R AW和S O C K _ R D M。
第三個參數是p r o t o c o l。指定的地址家族和套接字類型有多個條目時,就可用這個字段來限定使用特定傳輸。
如果在W S A S o c k e t函數時,已經利用W S A E n u m P r o t o c o l s列舉了所有協議,就可選定一個W S A P R O TO C O L _ I N F O結構,並將它當作l p P r o t o c o l I n f o參數投遞到W S A S o c k e t。之後,若在前三個參數(a f、t y p e和p r o t o c o l)中都指定常量F R O M _ P R O TO C O L _ I N F O,就會轉而採用W S A P R O TO C O L _ I N F O結構中提供那三個值;
組參數始終爲0;
要指定一個或多個下列標誌,可用d w F l a g s參數:
■ W S A _ F L A G _ O V E R L A P P E D
■ W S A _ F L A G _ M U LT I P O I N T _ C _ R O O T
■ W S A _ F L A G _ M U LT I P O I N T _ C _ L E A F
■ W S A _ F L A G _ M U LT I P O I N T _ D _ R O O F
■ W S A _ F L A G _ M U LT I P O I N T _ D _ L E A F
第一個參數制定SOCKET具備重疊I/O使用socket函數創建SOCKET時默認有;
 
具體平臺的問題
Windows NT 4和Windows 2000都支持Wi n s o c k 2,Windows CE只支持Winsock 1.1規格。
Windows CE只支持T C P / I P和紅外線套接字.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章