32.DLL
int WSAStartup(
WORD wVersionRequested,//高位字節指定Winsock庫的副版本,低位字節是主版本號
LPWSADATA lpWSAData//[out]用來接收Windows Sockets實現細節
);
<4> 終止對套字庫WS2_32.DLL的使用
int WSACleanup (void);
<5> Winsock庫中的擴展函數WSASocket將創建套接字
SOCKET WSASocket(
int af,//地址簇標識
int type,//socket類型SOCK_DGRAM為UDP
int protocol,//協議簇
LPWSAPROTOCOL_INFO lpProtocolInfo,//定義創建套接字的特性,如果為NULL,則
//WinSock2.Dll使用前三個參數決定使用哪個服務提供者
GROUP g,//保留
DWORD dwFlags//指定套接字屬性的描述,如果為WSA_FAG_OVERLAPPED則為一個重疊套接字,與文件中相似,
);
然後在套接字上調用WSASend, WSARecv,WSASendTo,WSARecvFrom,SWAIoctl這些函數都會立即返回,這些操作完成後,操作係統會通過某種方式來通知調用線程,後者就可以根據通知信息判斷操作是否完成
<6> WSARecvFrom接收數據報類型的數據,並保存數據發送方的地址
int WSARecvFrom(
SOCKET s,//套接字描述符
LPWSABUF lpBuffers,//指向WSABUF數據指針,一個成員緩衝區指針buf,另個長度
DWORD dwBufferCount,//lpBuffers數組中WSABUF結構體的數上,一般為1
LPDWORD lpNumberOfBytesRecvd,//[out]接收完成後數據字節數指針
LPDWORD lpFlags,//[in/out]標誌會影響函數行為,設置為0即可
struct sockaddr FAR *lpFrom,//[out]可選,指向重疊操作完成後存放源地址的緩衝區
LPINT lpFromlen,//[in/out]指定lpFrom緩衝區大小的指針
LPWSAOVERLAPPED lpOverlapped,//指向重疊套接字指針,非重疊忽略
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine//一個指定接收完成時調用的完成全程指針(非重疊套接字的忽略0
);
如果創建是重疊套接字,最後兩個參數值要設置,因為這時將會采用重疊I/O,函數會返回,當接收數據這一操作完成後,操作係統會調用lpCompletionRoutine參數指定的例程來通知調用線程,這個例程就是一個回調函數.
<7>WSASendTo發送數據報類型的數據
int WSASendTo(
SOCKET s,//套接字描述符
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,//0即可
const struct sockaddr FAR *lpTo,//可選指針,指向目標套接字的地址
int iToLen,//lpTo中地址長度
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
5. 一個網絡聊天室程序的實現
新建工程基於對話框,工程名為Chat,並添加一些控件主要兩個編輯,IP控件和發送按鈕
[1] 加載套接字庫