Winsock协议目录
SPI提供3种协议:
1 分层协议
在基础协议的上层,依靠底层基础协议实现更高级的通信服务。
2 基础协议
能够独立安全地,和远程断电实现数据通信的协议,相对于分层协议而言的
3 协议连
将一系列的基础协议,分层协议按特定的顺序连接在一起的链状结构。
协议特性:
winsock用WSAPROTOCOL_INFO结构描述特定协议的完整信息。称为一个winsock目录入口。
两个重要标识:
ProviderId:服务开发商提供的全局唯一标识
dwCatalogEntryId为每个WSAPROTOCOL_INFO结构安排的唯一标识,称为目录入口ID。
使用winsockapi函数枚举协议
使用WSAEnumProtocols仅能枚举基础协议和协议链,不能枚举分层协议
#include "..\common\initsock.h"#include <windows.h>#include <stdio.h>LPWSAPROTOCOL_INFO GetProvider(LPINT lpnTotalProtocols)
{DWORD dwSize = 0;LPWSAPROTOCOL_INFO pProtoInfo = NULL;if(::WSAEnumProtocols(NULL,pProtoInfo,&dwSize) == SOCKET_ERROR){if(::WSAGetLastError() != WSAENOBUFS)return NULL;}pProtoInfo = (LPWSAPROTOCOL_INFO)::GlobalAlloc(GPTR,dwSize);*lpnTotalProtocols = ::WSAEnumProtocols(NULL,pProtoInfo,&dwSize);return pProtoInfo;
}
void FreeProvider(LPWSAPROTOCOL_INFO pProtoInfo)
{::GlobalFree(pProtoInfo);
}
CInitSock theSock;
void main()
{int nTotalProtocols;LPWSAPROTOCOL_INFO pProtoInfo = GetProvider(&nTotalProtocols);if(pProtoInfo != NULL){for(int i=0;i<nTotalProtocols;i++){printf("Protocol:%s\n",pProtoInfo[i].szProtocol);printf("CatalogEntryId:%d ChainLen:%d\n\n",pProtoInfo[i].dwCatalogEntryId,pProtoInfo[i].ProtocolChain.ChainLen);}FreeProvider(pProtoInfo);}
}
使用winsock SPI函数枚举协议
winsock SPI提供的枚举协议的函数是WSCEnumProtocols,能够枚举各种协议,包括分层协议,基础协议,协议链。
与WSAEnumProtocols相比,只多了一个 lpError的参数
下面是WSCEnumProtocols代码:
///
// 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()
{LPWSAPROTOCOL_INFOW pProtoInfo;int nProtocols;pProtoInfo = GetProvider(&nProtocols);for(int i=0; i<nProtocols; i++){printf(" Protocol: %ws \n", pProtoInfo[i].szProtocol);printf(" CatalogEntryId: %d ChainLen: %d \n\n", pProtoInfo[i].dwCatalogEntryId, pProtoInfo[i].ProtocolChain.ChainLen);}
}
Winsock协议目录相关推荐
- lr中winsock协议的脚本(转载51testing)
winsock协议代码 Actions() { char acTest[100]; char acTest2[100]; char* pcTest3; //生成发送的串 sprintf(acTest, ...
- java ldap 工具_通过定义LdapUtil工具类实现JAVA关于LDAP协议目录数据保存和删除等操作代码示例...
一.前言 关于基于jdk开发包javax.naming.directory.DirContext.javax.naming.directory.InitialDirContext目录协议定义LdapU ...
- 网络编程之Winsock2 服务提供者接口(SPI)
[1]Winsock2 服务提供者接口(SPI): 一.简述: 1.一般用于提供给操作系统开发商.传输堆栈商在基础协议的基础上,开发更高级的服务. 2.因为Winsock服务体系符合Windows开放 ...
- 一种解决 【Jupyter Notebook 由于超时无法打开kernel】与【Pycharm 卡在启动界面】的方法
目录 问题描述 解决方案 原因探究 问题描述 今儿打开Jupyter Notebook(vscode配置),刚运行就给我报一错.问题界面如下: 关键在于这条信息是立即报出的,并不是常见的timeout ...
- 什么是LSP???如何看待LSP???
LSP: layered service privider 分层服务提供商. LSP是TCP/IP等协议的接口. 浏览器,聊天工具等等都要通过这个接口来获取相应的信息. 删除不正确的(也称为&qu ...
- 重置 Winsock 目录解决电脑应用无法启动问题
前言 前两天,因为部署测试环境,搞了一些无意操作,导致在内网域中我电脑的ip在该内网域内其它ip都能访问到,就只有这台服务器的ip访问不了:开始以为是服务器关机或者它出了什么问题,但是其它同事都能pi ...
- 不能随便输入的“netsh winsock reset”
写这篇文章是因为我在cmd输入了题目中这段命令,结果问题越解决越麻烦.至于为什么输这段指令也是一个悲伤的故事,不再多说. netsh winsock reset 这个命令作用是重置 Winsock 目 ...
- 输入netsh winsock reset 重启电脑生效
系统Win7 要用[管理员身份]打开cmd : 输入 netsh winsock reset :命令 要重启电脑才会生效, winsock是Windows网络编程接口,winsock工作在应用层. n ...
- 了解一下winsock
最近碰到了ipv4协议的属性打不开,无法修改的问题,从而无法上网,网上寻求各种办法,其中有说是重置一下winsock,虽然依旧没有解决我的问题,不过还是很好奇winsock到底是个什么东东,所以又查了 ...
最新文章
- 火焰图(Flame Graphs)的安装和基本用法
- 完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
- java小知识_java小知识点简单回顾
- 看Quick Audience 如何有效提升营销活动管理效率
- matlab使用常犯的错误
- SQL语言基础:SQL中的数据完整性约束用法
- C++实现静态顺序表的增删查改以及初始化
- 【LeetCode】智商题 brainteaser(共3题)
- Ant学习---第一节:Ant安装和简单使用
- php 右下脚弹窗,多种样式jQuery网页右下角弹出提示信息代码
- 屏保壁纸引发血案,三星手机瞬间变砖
- linux之chsh命令
- 图:试图播放的文件扩展名与文件格式不匹配。播放该文件可能会导致意外行为...的解决办法
- [2018.10.20 T1] 蛋糕
- Qt4 在x86和arm平台上的一些配置
- 解决俄罗斯大shen精简版Win10无法远程的问题及同类精简版系统无法远程问题,简单快捷方法。
- named_struct类型怎么用
- 获取素材列表返回40004 invalid media type !(大坑)解决办法
- masm 16位汇编语法
- IP地址中A类、B类、C类地址的区别