int PASCAL FAR WSAStartup(Word wVersionRequested, LPWSADATA lpWSAData); 其中 wVersionRequested 保證 SOCKETS 可正常運(yùn)行的 DLL 版本,假如不支持,則返回錯(cuò)誤信息。WORD wVersionRequested;// 定義版本信息變量
WSADATA wsaData;//定義數(shù)據(jù)信息變量
int err;//定義錯(cuò)誤號變量
wVersionRequested = MAKEWORD(1,1);//給版本信息賦值
err = WSAStartup(wVersionRequested, &wsaData);//給錯(cuò)誤信息賦值
if(err!=0)
{
return;//告訴用戶找不到合適的版本
}
//確認(rèn) Windows Sockets DLL 支持 1.1 版本
//DLL 版本可以高于 1.1
//系統(tǒng)返回的版本號始終是最低要求的 1.1,即應(yīng)用程序與DLL 中可支持的最低版本號
if(LOBYTE(wsaData.wVersion)!= 1 HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();//告訴用戶找不到合適的版本
return;
}
//Windows Sockets DLL 被進(jìn)程接受,可以進(jìn)入下一步操作 關(guān)閉函數(shù)使用時(shí),任何打開并已連接的 SOCK_STREAM 套接字被復(fù)位,但那些已由 closesocket() 函數(shù)關(guān)閉的但仍有未發(fā)送數(shù)據(jù)的套接字不受影響,未發(fā)送的數(shù)據(jù)仍將被發(fā)送。程序運(yùn)行時(shí)可能會多次調(diào)用 WSAStartuo() 函數(shù),但必須保證每次調(diào)用時(shí)的 wVersionRequested 的值是相同的。 2、異步請求服務(wù)HANDLE taskHnd;
char hostname="rs6000";
taskHnd = WSAAsyncBetHostByName(hWnd,wMsg,hostname,buf,buflen); 需要注重的是,由于 Windows 的內(nèi)存對像可以設(shè)置為可移動和可丟棄,因此在操作內(nèi)存對象是,必須保證 WIindows Sockets DLL 對象是可用的。 case UM_SOCK:
switch(lParam)
{
case FD_READ:
len = recv(wParam,lpBuffer,length,0);
break;
case FD_WRITE:
while(send(wParam,lpBuffer,len,0)!=SOCKET_ERROR)
break;
}
break; 4、出錯(cuò)處理len = send (s,lpBuffer,len,0);
of((len==SOCKET_ERROR)&&(WSAGetLastError()==WSAWOULDBLOCK)){...} 新聞熱點(diǎn)
疑難解答
圖片精選