第7章 Winsock 服务提供者接口 (SPI)

来源:互联网 发布:centos ftp服务器配置 编辑:程序博客网 时间:2024/05/21 00:52

本章的两个例子源码 :

(1)、LSP   (2)、InstDemo

例子本身没问题,但是在安装了 LSP.dll 之后,貌似网络断了。搞了半天,居然是 DLL 路径的问题,出现全部网络连接都不通的原因是找不到安装的 DLL。

 

最安全的安装方式是 :

   1)、比如,LSP.dll 和 InstDemo.exe 位于 C:\LSP ,则将 CMD 也设置到 路径 C:\LSP 。

   2)、InstDemo --> InstallProvider 传入 DLL的完整路径 。

 

如果,还是有不能访问网络的现象发生,就查看下DLL所在的路径,看看是不是装对了...

///////////////////////////////////////////////////////////// WSCEnumProtocols.cpp文件#include <Ws2spi.h>//  SPI函数定义在Ws2spi.h文件中#include <windows.h>#include <stdio.h>#pragma comment(lib, "WS2_32")// 链接到WS2_32.libLPWSAPROTOCOL_INFOW GetProvider(LPINT lpnTotalProtocols){int nError;DWORD dwSize = 0;LPWSAPROTOCOL_INFOW pProtoInfo = NULL;//  取得需要的缓冲区长度if(::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError) == SOCKET_ERROR){if(nError != WSAENOBUFS)return NULL;}// 申请缓冲区,再次调用WSCEnumProtocols函数pProtoInfo = (LPWSAPROTOCOL_INFOW)::GlobalAlloc(GPTR, dwSize);*lpnTotalProtocols = ::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError);return pProtoInfo;}void FreeProvider(LPWSAPROTOCOL_INFOW pProtoInfo){::GlobalFree(pProtoInfo);}void main(){WSADATA wsaData;WORD sockVersion = MAKEWORD(2, 2);if(::WSAStartup(sockVersion, &wsaData) != 0){printf("WSAStartup failed : %d\n", ::GetLastError());return;}LPWSAPROTOCOL_INFOW pProtoInfo;int nProtocols;pProtoInfo = GetProvider(&nProtocols);for(int i=0; i<nProtocols; i++){printf("==> %d) : \n", i);printf("      Protocol: %ws \n", pProtoInfo[i].szProtocol);printf("      CatalogEntryId: %dChainLen: %d \n", pProtoInfo[i].dwCatalogEntryId, pProtoInfo[i].ProtocolChain.ChainLen);int nError;WCHAR szBaseProviderDll[MAX_PATH] = {0};int nLen = MAX_PATH;if (SOCKET_ERROR == ::WSCGetProviderPath(&pProtoInfo[i].ProviderId, &szBaseProviderDll[0], &nLen, &nError)){printf("      WSCGetProviderPath(%d) failed %d \n", i, nError);}else{if (! ::ExpandEnvironmentStringsW(szBaseProviderDll, szBaseProviderDll, MAX_PATH)){printf("      ExpandEnvironmentStringsW(%d) failed %d \n", i, ::GetLastError());}else{printf("      %ws\n\n", szBaseProviderDll);}}}}

原创粉丝点击