关于winsock:注册和名称解析

42、深入解析WINS、NetBIOS、DNS和Winsock的名称解析机制 本文深入解析了微软企业网络中WINS、NetBIOS、DNS和Winsock的名称解析机制。详细介绍了网络计算机的名称注册过程、WINS出现前的名称解析工具LMHOSTS的使用方法,以及WINS的工作原理、安装配置和与其他名称解析方法的对比。此外,还包含了名称解析的流程示例、常见问题及解决方法,以及实际应用中的最佳实践。对于网络管理员和相关技术人员来说,是一篇全面了解名称解析技术的参考指南。 阅读详情

Windows套接字2是一组功能,用于标准化应用程序访问和使用各种网络命名服务的方式。 使用这些功能时,应用程序无需区分与名称服务相关的广泛不同的协议,如DNS,NIS,X.500,SAP等。要保持与Windows套接字1.1的完全向后兼容性,现有的getXbyY和异步WSAAsyncGetXbyY数据库查找 功能继续受支持,但在新的名称解析功能方面在Windows套接字服务提供程序接口中实现。 有关更多信息,请参阅getservbyname和getservbyport函数。 另请参阅Windows套接字1.1 SPI中的TCP / IP兼容名称解析。

本节介绍Winsock开发人员可用的注册和名称解析功能。 以下列表描述了本节中的主题:

  • 与协议无关的名称解析
  • Windows套接字1.1 API中TCP / IP的兼容名称解析

 

一、与协议无关的名称解析

在开发独立于协议的客户端/服务器应用程序时,在名称解析和注册方面存在两个基本要求:

  • 服务器的一半应用程序(服务)在一个或多个名称空间内注册(或可访问)的能力。
  • 客户端应用程序在命名空间内查找服务并获取所需传输协议和寻址信息的能力。

对于那些习惯于开发基于TCP / IP的应用程序的人来说,这似乎只涉及查找主机地址然后使用商定的端口号。 但是,其他网络方案允许在运行时发现服务的位置,用于服务的协议以及其他属性。 为了适应现有名称服务中广泛的功能,Windows Sockets 2接口采用本节主题中描述的模型。

本节介绍Winsock开发人员可用的与协议无关的名称解析功能。 以下列表描述了本节中的主题:

  • 名称解析模型
  • 名称解析功能摘要
  • 名称解析数据结构

 

一)、名称解析模型

命名空间指的是将网络服务的协议和寻址属性与一个或多个友好名称相关联(至少)的一些功能。 目前,许多名称空间广泛使用,包括Internet的域名系统(DNS),Active Directory域服务,平构数据库,Novell的NetWare目录服务(NDS)和X.500。 这些名称空间在组织和实施方式上差异很大。 从Winsock名称解析的角度来看,它们的一些属性尤为重要。

1、命名空间的类型

有三种不同类型的命名空间可以注册服务:

  • 动态
  • 静态的
  • 一贯

动态命名空间允许服务在运行时向命名空间注册,并允许客户端在运行时发现可用的服务。 动态命名空间经常依赖于广播来指示网络服务的持续可用性。 较旧的动态命名空间示例包括NetWare环境中使用的服务广告协议(SAP)命名空间和AppleTalk使用的名称绑定协议(NBP)命名空间。 Windows上使用的对等名称解析协议(PNRP)命名空间是动态命名空间的最新示例。

静态命名空间要求提前注册所有服务,即创建命名空间时。 静态命名空间的一个示例是大多数TCP / IP实现使用的主机,协议和服务文件。 在Windows上,这些文件通常位于C:\ windows \ system32 \ drivers \ etc文件夹中。

持久命名空间允许服务在运行时向命名空间注册。然而,与动态命名空间不同,持久命名空间将注册信息保留在非易失性存储中,直到服务请求删除它为止。持久命名空间以X.500和NDS(NetWare目录服务)等目录服务为代表。这些环境允许添加,删除和修改服务属性。另外,表示目录服务内的服务的服务对象可以具有与服务相关联的各种属性。客户端应用程序最重要的属性是服务的寻址信息。 DNS是持久命名空间的另一个示例。虽然有一种使用Windows套接字解析DNS名称的编程方法,但Windows中的DNS命名空间提供程序不支持使用Winsock注册新的DNS名称。您必须直接使用DNS功能来注册DNS名称。有关更多信息,请参阅DNS参考。
 

2、命名空间组织

许多名称空间按层次排列。 某些(例如X.500和NDS)允许无限制嵌套。 其他人允许将服务组合成单个级别的层次结构或组。 这通常称为工作组。 构造查询时,通常需要在命名空间层次结构中建立一个上下文点,搜索将从该层次结构开始。

 

3、命名空间提供程序架构

当然,用于查询各种类型的命名空间以及在命名空间内注册信息(如果支持)的编程接口差别很大。 命名空间提供程序是本地驻留的软件,它知道如何在Winsock命名空间SPI和某些现有命名空间(可以在本地实现或通过网络访问)之间进行映射。 命名空间提供程序体系结构说明如下:

请注意,给定命名空间(例如DNS)可能在给定计算机上安装了多个命名空间提供程序。

如上所述,通用术语服务指的是客户端/服务器应用程序的服务器的一半。在Winsock中,服务与服务类相关联,并且特定服务的每个实例都具有服务名称,该服务名称在服务类中必须是唯一的。服务类的示例包括FTP服务器,SQL Server,XYZ Corp.员工信息服务器等。如示例试图说明的那样,一些服务类是众所周知的,而其他服务类是特定的垂直应用程序是唯一的和特定的。在任何一种情况下,每个服务类都由类名和类标识符表示。类名不一定必须是唯一的,但类标识符必须是唯一的。全局唯一标识符(GUID)用于表示服务类标识符。对于众所周知的服务,已经预先分配了类名和类标识符(GUID),并且宏可用于在例如TCP端口号(以主机字节顺序)和相应的类标识符GUID之间进行转换。对于其他服务,开发人员选择类名并使用Uuidgen.exe实用程序为类标识符生成GUID。

存在服务类的概念以允许建立由特定服务的所有实例共同保持的一组属性。 在将服务类定义到Winsock时提供这组属性,并将其称为服务类模式信息。 当服务安装并在主机上可用时,该服务被视为实例化,并且其服务名称用于将服务的特定实例与命名空间可能已知的其他实例区分开。

请注意,服务类的安装只需要在执行服务的计算机上进行,而不是在可能使用该服务的所有客户机上进行。 在可能的情况下,Ws2_32.dll在注册服务的实例化或启动服务查询时向命名空间提供程序提供服务类模式信息。 当然,Ws2_32.dll本身并不存储此信息,而是尝试从已指示其提供此数据的能力的命名空间提供程序中检索它。 由于无法保证Ws2_32.dll可以提供服务类模式,因此需要此信息的命名空间提供程序必须具有回退机制才能通过特定于命名空间的方式获取它。

如上所述,因特网采用了可称为以主机为中心的服务模型。 需要定位服务的传输地址的应用程序通常必须首先解析已知承载服务的特定主机的地址。 他们在这个地址添加了众所周知的端口号,从而创建了一个完整的传输地址。 为了便于解析主机名,已预先分配了一个特殊的服务类标识符(SVCID_HOSTNAME)。 如果查询成功,则将SVCID_HOSTNAME指定为服务类并指定服务实例名称的主机名的查询将返回主机地址信息。

在Windows套接字2中,独立于协议的应用程序应该避免需要理解传输地址的内部细节。 因此,首先获得主机地址然后添加端口的需要是有问题的。 为了避免这种情况,查询还可以包括特定服务的众所周知的名称以及服务运行的协议,例如FTP over TCP。 在这种情况下,成功的查询将在指定的主机上返回指定服务的完整传输地址,并且不需要应用程序检查sockaddr结构的内部。

Internet的域名系统没有明确定义的方法来存储服务类架构信息。 因此,Winsock的DNS命名空间提供程序只能容纳已预先分配了服务类GUID的众所周知的TCP / IP服务。

实际上,这不是一个严重的限制,因为服务类GUID已经预先分配给整个TCP和UDP端口集,并且宏可用于检索与任何TCP或UDP端口关联的GUID,其端口以主机字节顺序表示。 因此,所有熟悉的服务,如HTTP,FTP,Telnet,Whois等都得到了很好的支持。

继续我们的服务类示例,FTP服务的实例名称可能是“alder.intel.com”或“ftp.microsoft.com”,而XYZ Corp.员工信息服务器的实例可能被命名为“XYZ Corp.员工信息” 服务器版本3.5“。

在前两种情况下,FTP的服务类GUID和计算机名称(作为服务实例名称提供)的组合唯一地标识所需的服务。 在第三种情况下,可以在服务查询时发现服务所在的主机名,因此服务实例名称不需要包含主机名。

 

二)、名称解析功能摘要

名称解析功能可以分为三类:服务安装,客户端查询和帮助程序(带宏)。 以下各节确定了每个类别中的功能,并简要描述了它们的用途。 还描述了关键数据结构。

 

1、服务安装

当所需的服务类尚不存在时,应用程序使用WSAInstallServiceClass通过提供服务类名称,服务类标识符的GUID和一系列WSANSCLASSINFO结构来安装新的服务类。 这些结构各自特定于特定命名空间,并提供常见值,例如推荐的TCP端口号或NetWare SAP标识符。 可以通过调用WSARemoveServiceClass并提供与类标识符对应的GUID来删除服务类。

存在服务类后,可以通过WSASetService安装或删除特定的服务实例。 此函数将WSAQUERYSET结构作为输入参数以及操作代码和操作标志。 操作代码指示是否正在安装或删除服务。 WSAQUERYSET结构提供有关服务的所有相关信息,包括服务类标识符,服务名称(对于此实例),适用的命名空间标识符和协议信息,以及服务侦听的一组传输地址。 服务在初始化时应调用WSASetService以在动态命名空间中公布它们的存在。
 

2、客户查询

WSAEnumNameSpaceProviders函数允许应用程序发现可通过Winsock名称解析工具访问哪些名称空间。 它还允许应用程序确定多个命名空间提供程序是否支持给定的命名空间,以及发现任何特定命名空间提供程序的提供程序标识符。 使用提供程序标识符,应用程序可以将查询操作限制为指定的命名空间提供程序。

Winsock命名空间查询操作涉及一系列调用:WSALookupServiceBegin,然后是对WSALookupServiceNext的一次或多次调用,最后是对WSALookupServiceEnd的调用。 WSALookupServiceBegin将WSAQUERYSET结构作为输入来定义查询参数以及一组标志,以提供对搜索操作的额外控制。 它返回一个查询句柄,用于后续调用WSALookupServiceNext和WSALookupServiceEnd。

应用程序调用WSALookupServiceNext来获取查询结果,并在应用程序提供的WSAQUERYSET缓冲区中提供结果。 应用程序继续调用WSALookupServiceNext,直到返回错误代码WSA_E_NO_MORE,表明已检索到所有结果。 然后通过调用WSALookupServiceEnd终止搜索。 当从另一个线程调用时,WSALookupServiceEnd函数还可用于取消当前挂起的WSALookupServiceNext。

在Windows套接字2中,为WSAENOMORE(10102)和WSA_E_NO_MORE(10110)定义了冲突的错误代码。 将来的版本中将删除错误代码WSAENOMORE,并且只保留WSA_E_NO_MORE。 但是,对于Windows套接字2,应用程序应检查WSAENOMORE和WSA_E_NO_MORE,以便尽可能与使用其中任何一个的命名空间提供程序兼容。
 

3、助手功能

名称解析辅助函数包括一个函数,用于在给定服务类标识符的情况下检索服务类名称,一对用于在SOCKADDR结构和ASCII字符串表示之间转换传输地址的函数,一个用于检索服务类模式信息的函数。 给定的服务类,以及一组用于将众所周知的服务映射到预分配的GUID的宏。

Winsock2.h中的以下宏有助于在众所周知的服务类和这些名称空间之间进行映射:

宏描述
SVCID_TCP(Port) SVCID_UDP(Port)
SVCID_NETWARE(Object Type)
给定TCP / IP或UDP / IP的端口或NetWare的对象类型,返回GUID(主机顺序的端口号)。
IS_SVCID_TCP(GUID)IS_SVCID_UDP(GUID)
IS_SVCID_NETWARE(GUID)
如果GUID在允许范围内,则返回TRUE。
SET_TCP_SVCID(GUID, port)SET_UDP_SVCID(GUID, port)使用与TCP或UDP端口号等效的GUID初始化GUID结构(端口号必须按主机顺序排列)。
PORT_FROM_SVCID_TCP(GUID)PORT_FROM_SVCID_UDP(GUID)
SAPID_FROM_SVCID_NETWARE(GUID)
返回与GUID关联的端口或对象类型(主机顺序中的端口号)。

 

三)、名称解析数据结构

在名称解析功能中广泛使用了几种重要的数据结构。

 

1、与查询相关的数据结构

WSAQUERYSET结构用于形成WSALookupServiceBegin的查询,并用于为WSALookupServiceNext提供查询结果。 它是一个复杂的结构,因为它包含指向其他几个结构的指针,其中一些结构还引用了其他结构。 WSAQUERYSET结构与其引用的结构之间的关系如下所示。

在WSAQUERYSET结构中,大多数成员都是自解释的,但有些成员应该得到额外的解释。 必须始终使用sizeof(WSAQUERYSET)填充dwSize成员,因为命名空间提供程序使用它来检测和适应可能随时间出现的WSAQUERYSET结构的不同版本。

命名空间提供程序使用dwOutputFlags成员来提供有关查询结果的其他信息。 有关详细信息,请参阅WSALookupServiceNext函数。

lpversion成员引用的WSAECOMPARATOR结构用于查询约束和结果。 对于查询,dwVersion成员指示所需的服务版本。 ecHow成员是枚举类型,它指定如何进行比较。 选项是COMP_EQUALS,它要求版本完全匹配,或者COMP_NOTLESS指定服务的版本号不小于dwVersion成员的值。

dwNameSpace和lpNSProviderId的解释取决于结构的使用方式,并在使用此结构的各个函数描述中进一步描述。

lpszContext成员应用于分层命名空间,并指定查询的起始点或服务所在的层次结构中的位置。 一般规则是:

  • 值NULL,空白(“”)在默认上下文中开始搜索。
  • 值“\”开始命名空间顶部的搜索。
  • 任何其他值都会在指定点开始搜索。

如果指定了除“”或“\”以外的任何内容,则不支持包含的提供程序可能会返回错误。 支持有限限制的提供程序(如组)应接受“”,“\”或指定的点。上下文是特定于命名空间的。如果dwNameSpace成员是NS_ALL,则只应将“”或“\”作为上下文传递 因为这些都被所有名称空间识别。

lpszQueryString成员用于提供其他特定于命名空间的查询信息,例如描述已知服务和传输协议名称的字符串,如“FTP / TCP”中所示。

lpafpProtocols成员引用的AFPROTOCOLS结构仅用于查询目的,并提供协议列表以约束查询。 这些协议表示为(地址族,协议)对,因为协议值仅在地址族的上下文中具有含义。

lpcsaBuffer成员引用的CSADDR_INFO结构数组包含服务用于建立侦听所需的所有信息,或者客户端用于建立与服务的连接所需的所有信息。 LocalAddr和RemoteAddr成员都直接包含SOCKET_ADDRESS结构。

服务将通过使用LocalAddr.lpSockaddr-> sa_family,iSocketType和iProtocol的元组作为参数调用套接字或WSASocket函数来创建套接字。 通过使用LocalAddr.lpSockaddr和LocalAddr.lpSockaddrLength作为参数调用bind函数,服务将套接字绑定到本地地址。

客户端通过使用LocalAddr.lpSockaddr-> sa_family,iSocketType和iProtocol的元组作为参数调用套接字或WSASocket函数来创建其套接字。 在使用connect,ConnectEx或WSAConnect函数建立远程连接时,客户端使用RemoteAddr.lpSockaddr和RemoteAddr.lpSockaddrLength的组合作为参数。

 

2、服务类数据结构

安装新服务类时,必须准备并提供WSASERVICECLASSINFO结构。 此结构还包含子结构,其中包含一系列适用于特定名称空间的成员。 类信息数据结构如下:

对于每个服务类,都有一个WSASERVICECLASSINFO结构。 在WSASERVICECLASSINFO结构中,服务类的唯一标识符包含在lpServiceClassId成员中,并且相关的显示字符串由lpServiceClassName成员引用。 这是WSAGetServiceClassNameByClassId函数返回的字符串。

WSASERVICECLASSINFO结构中的lpClassInfos成员引用WSANSCLASSINFO结构数组,每个结构都提供一个适用于指定命名空间的命名和类型成员。 lpszName成员的值示例包括:“SapId”,“TcpPort”,“UdpPort”等。这些字符串通常特定于dwNameSpace成员中标识的命名空间。 dwValueType成员的典型值可能是REG_DWORD,REG_SZ等.dwValueSize成员指示lpValue指向的数据项的长度。

在调用WSAInstallServiceClass函数时,将为每个命名空间提供程序提供WSASERVICECLASSINFO结构中表示的整个数据集合。 然后,每个单独的命名空间提供程序都会筛选WSANSCLASSINFO结构列表,并保留适用于它的信息。

 

 

二、Windows套接字1.1 API中TCP / IP的兼容名称解析

注意

用于名称解析的所有Windows套接字1.1函数都特定于IPv4 TCP / IP网络。 强烈建议应用程序开发人员继续使用仅支持IPv4的这些特定于传输的功能。

应用程序开发人员应使用以下与协议无关的功能,并支持IPv6和IPv4名称解析。

Windows套接字1.1定义了许多用于使用TCP / IP(IP版本4)网络进行名称解析的例程。 这些有时称为getXbyY函数,包括以下内容:

gethostname
gethostbyaddr
gethostbyname
getprotobyname
getprotobynumber
getservbyname
getservbyport

还定义了这些函数的异步版本。

WSAAsyncGetHostByAddr
WSAAsyncGetHostByName
WSAAsyncGetProtoByName
WSAAsyncGetProtoByNumber
WSAAsyncGetServByName
WSAAsyncGetServByPort

现在还有两个函数,现在在Winsock2.dll中实现,用于将点分别的Ipv4地址符号分别转换为字符串和二进制表示。

inet_addr
inet_ntoa

为了保持与Windows套接字1.1的严格向后兼容性,只要至少有一个支持AF_INET地址系列的命名空间提供程序(这些功能与IP版本6无关),就会继续支持所有旧的仅支持IPv4的功能。 ,由AF_INET6表示。

Ws2_32.dll使用适当的WSALookupServiceBegin / Next / End函数调用序列,在新的,与协议无关的名称解析工具方面实现这些兼容性函数。 下面提供了如何将getXbyY函数映射到名称解析函数的详细信息。 WSs2_32.dll处理getXbyY函数的异步和同步版本之间的差异,因此仅讨论了同步getXbyY函数的实现。

本节介绍Windows Sockets 1.1 API中TCP / IP的兼容名称解析。 以下列表描述了本节中的主题:

  • API中GetXbyY的基本方法
  • API中的getprotobyname和getprotobynumber 函数
  • API中的getservbyname和getservbyport函数
  • API中的gethostbyname 函数
  • API中的gethostbyaddr 函数
  • API中的gethostname函数

 

一)、API中GetXbyY的基本方法

大多数getXbyY函数由Ws2_32.dll转换为WSALookupServiceBegin,WSALookupServiceNext和WSALookupServiceEnd序列,该序列使用一组特殊GUID作为服务类。 这些GUID标识正在模拟的getXbyY操作的类型。 该查询仅限于支持AF_INET的名称服务提供程序。 每当getXbyY函数返回HOSTENT或SERVENT结构时,Ws2_32.dll都会在WSALookupServiceBegin中指定LUP_RETURN_BLOB标志,以便名称服务提供程序返回所需的信息。 必须稍微修改这些结构,因为必须用相对于blob数据开始的偏移替换其中包含的指针。 当然,这些指针参数引用的所有值必须完全包含在blob中,并且所有字符串都是ASCII。

 

二)、API中的getprotobyname和getprotobynumber 函数

getprotobyname和getprotobynumber函数通过查询本地协议数据库在Ws2_32.dll中实现。 它们不会导致任何名称解析查询。

 

三)、API中的getservbyname和getservbyport函数

getservbyname和getservbyport函数使用WSALookupServiceBegin函数来查询SVCID_INET_SERVICEBYNAME作为服务类GUID。 传递给WSALookupServiceBegin函数的WSAQUERYSET结构中的lpszServiceInstanceName成员引用字符串以指示服务名称或服务端口,以及(可选)服务协议。 字符串的格式说明为FTP或TCP或21 / TCP或只是FTP。 字符串不区分大小写。 斜杠标记(如果存在)将协议标识符与字符串的前一部分分开。 Ws2_32.dll将指定LUP_RETURN_BLOB,命名空间提供程序将在Blob中放置一个SERVENT结构(使用偏移而不是如上所述的指针)。 命名空间提供程序也应该遵循这些其他LUP_RETURN_ *标志。

Flag描述
LUP_RETURN_NAME从lpszServiceInstanceName中的SERVENT结构返回s_name成员。
LUP_RETURN_TYPE返回lpServiceClassId中的规范GUID可以理解,根据本地建立的约定,标识为FTP或21的服务可以在另一个端口上。 SERVENT结构的s_port参数应指示在本地环境中可以联系服务的位置。 设置LUP_RETURN_TYPE时返回的规范GUID应该是来自Svcs.h的预定义GUID之一,它对应于SERVENT结构中指示的端口号。

 

四)、API中的gethostbyname 函数

gethostbyname函数使用WSALookupServiceBegin函数来查询SVCID_INET_HOSTADDRBYNAME作为服务类GUID。 主机名在传递给WSALookupServiceBegin函数的WSAQUERYSET结构中的lpszServiceInstanceName成员中提供。 Ws2_32.dll指定LUP_RETURN_BLOB,名称服务提供者在blob中放置HOSTENT结构(使用偏移而不是如上所述的指针)。 名称服务提供商也应该遵守这些其他LUP_RETURN_ *标志。

FlagDescription
LUP_RETURN_NAME从lpszServiceInstanceName中的HOSTENT结构返回h_name成员。
LUP_RETURN_ADDR从CSADDR_INFO结构中的HOSTENT返回寻址信息,端口信息默认为零。 请注意,此例程不会解析由虚线IPv4地址组成的主机名。

 

五)、API中的gethostbyaddr 函数

gethostbyaddr函数使用WSALookupServiceBegin函数将SVCID_INET_HOSTNAMEBYADDR作为服务类GUID进行查询。 主机地址在传递给WSALookupServiceBegin函数的WSAQUERYSET结构的lpszServiceInstanceName成员中作为虚线的decimnal IPv4字符串(例如,“192.9.200.120”)提供。 Ws2_32.dll指定LUP_RETURN_BLOB,名称服务提供者在blob中放置HOSTENT结构(使用偏移而不是如上所述的指针)。 名称服务提供商也应该遵守这些其他LUP_RETURN_ *标志。

Flag描述
LUP_RETURN_NAME从lpszServiceInstanceName中的HOSTENT结构返回h_name成员。
LUP_RETURN_ADDR从CSADDR_INFO结构中的HOSTENT返回寻址信息,端口信息默认为零。

 

六)、API中的gethostname函数

gethostname函数使用WSALookupServiceBegin函数将SVCID_HOSTNAME作为服务类GUID进行查询。如果传递给WSALookupServiceBegin函数的WSAQUERYSET结构的lpszServiceInstanceName成员为NULL或引用NULL字符串(即“。”),则将解析本地主机。否则,将发生对指定主机名的查找。出于模拟gethostname的目的,Ws2_32.dll为lpszServiceInstanceName成员指定NULL指针,并指定LUP_RETURN_NAME以便在lpszServiceInstanceName成员中返回主机名。如果应用程序使用此查询并指定LUP_RETURN_ADDR,则主机地址在CSADDR_INFO结构中提供。此查询未定义LUP_RETURN_BLOB操作。除非传递给WSALookupServiceBegin函数的WSAQUERYSET结构的lpszQueryString成员引用诸如FTP之类的服务,否则端口信息默认为零,在这种情况下,提供指示服务的完整传输地址。
 

44、TCP/IP 基础设施中的 WINS 与名称解析详解 本文深入解析了 TCP/IP 基础设施中的 WINS 服务器配置、记录管理、代理代理以及名称解析的详细内容。通过技术分析和实际案例,帮助读者全面理解网络中名称解析的工作机制,并提供故障排查方法和网络优化建议,以确保网络的稳定运行和高效通信。 阅读详情

相关推荐

winsock注册方法

先将mswinsck.ocx拷贝到system32下 再将注册表文件添加到注册表 然后\"运行\",输入\"regsvr32 MSWINSCK.OCX\",确定

windows网络编程 | getservbyname()与getservbyport()

文章目录0. 服务结构 (struct servent)1. 函数 getservbyname()2. 函数 getservbyport() 0. 服务结构 (struct servent) 服务结构用于存储或返回给定服务名称的名称和服务编号。 typedef struct servent { char *s_name; char **s_aliases; #if ... char *s_proto; #if ... short s_port; #else short s

专注于C/C++/Linux领域创作 618

winsock带注册文件

一、WinSock简介 Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的网络通信应用程序接口之一。20世纪90年代初,由Sun Microsystems,JSB,FTP software,Microdyne和Microsoft等几家公司共同定制了一套标准,即Windows Socket规范,简称WinSock。 VB编写网络程序主要有两种方式:1.winsock控件 2.winsockAPI 二、WinSock控件的使用 1.WinSock控件的主要属性 LocalHostName属性 本地机器名 LocalIP属性 本地机器IP地址 LocalPort属性 本地机器通信程序的端口(0<端口<65536) RemoteHost属性 远程机器名 RemotePort属性 远程机器的通信程序端口 Protocol属性 通过Protocol属性可以设置WinSock控件连接远程计算机使用的协议。可选的协议是TCP和UDP对应的VB的常量分别是sckTCPProtocol和sckUDPProtocol,Winsock控件默认协议是TCP。注意:虽然可以在运行时设置协议,但必须在连接未建立或断开连接后。 SocketHandle属性 返回当前socket连接的句柄,这是只读属性。 RemoteHostIP属性 属性返回远程计算机的IP地址。在客户端,当使用了控件的Connect方法后,远程计算机的IP地址就赋给了RemoteHostIP属性,而在服务器端,当ConnectRequest事件后,远程计算机(客户端)的IP地址就赋给了这个属性。如果使用的是UDP协议那么当DataArrival事件后,发送UDP报文的计算机的IP才赋给了这个属性。 ByteReceived属性 返回当前接收缓冲区中的字节数 State属性 返回WinSock控件当前的状态 常数 值 描述 sckClosed 0 缺省值,关闭。 SckOpen 1 打开。 SckListening 2 侦听 sckConnectionPending 3 连接挂起 sckResolvingHost 4 识别主机。 sckHostResolved 5 已识别主机 sckConnecting 6 正在连接。 sckConnected 7 已连接。 sckClosing 8 同级人员正在关闭连接。 sckError 9   错误 2.WinSock主要方法 Listen方法 方法用于服务器程序,等待客户访问。格式:Winsock对象.listen Connect方法 用于向远程主机发出连接请求。格式:Winsock对象.connect [远程主机IP,远程端口] Accept方法 用于接受一个连接请求。格式:Winsock对象.accept Request ID Senddata方法 用于发送数据。格式:Winsock对象.senddata 数据 Getdata方法 用来取得接收到的数据。格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]] Close方法 关闭当前连接。格式:Winsock对象.close Bind方法 用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序不能再使用这个端口。 Listen方法Listen方法只在使用TCP协议时有用。它将应用程序置于监听检测状态。 Connect方法 当本地计算机希望和远程计算机建立连接时,就可以调用Connect方法。Connect方法调用的规范为:Connect RemoteHost,RemotePort Accept方法 当服务器接收到客户端的连接请求后,服务器有权决定是否接受客户端的请求。 SendData方法当连接建立后,要发送数据就可以调用SendData方法,该方法只有一个参数,就是要发送的数据。 GetData方法 当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓冲区中取出数据,可以使用GetData方法。GetData方法调用规范如下:GetData

WinSock 编程:Windows 网络编程的基础

WinSock(Windows Sockets)是 Microsoft Windows 操作系统中用于网络编程的一套 API(应用程序编程接口)。它提供了一组函数库,允许程序员在 Windows 平台上开发网络应用程序,实现网络通信和数据传输。WinSock 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,使他们能够更容易地实现网络功能。WinSock 广泛应用于各种 Windows 网络应用程序中,包括网页浏览器、即时通讯软件、网络游戏等。

JAZJD的博客 2452

win10专业版 winsock和winsock2注册表

现象: 无法上网,qq安全管家的网络修复卡在dns那里不动,看任务管理器dhcp服务占用很高 cmd ping同局域网地址可以ping通,ping外网不行 使用cmd 输入netsh winsock reset 显示找不到指定文件 解决办法: 怀疑是winsock 和winsock2损坏,替换winsock注册表

如何使用Calibre PERC抽出 点到点/p2p 电阻

@[TOC](如何使用Calibre PERC抽点到点(p2p)电阻) 一、前言 需要实现的功能是从gds中抽出net的点到点的电阻。如下图这样。 二、准备工作 lvs rule pex rule(必要时可以自己定义RC rule) gds p2p点的坐标 定义prode.defs 因为p2p的点是变化的,所以每次prode定义都要重新出,对应的perc rule也是根据每个p2p点的定义来的,perc rule也是每次都要重新出。如果需要可以写一个脚本自动出这些定义文件。 PROBE_POINTS

kobayashiyou的博客 1万+

Win10系统误删Winsock和Winsock2注册表,导致连不上Wifi以及无法上网等问题的解决方法

方法一:手动安装TCP/IP协议 方法一仅限于win10专业版,因为win10家庭版在安装TCP/IP协议时将会被组策略拦截下来,而win10家庭版又不存在本地组策略编辑器,所以家庭版无法手动安装;方法二通用。 方法一具体步骤:  1、开始->运行(或直接win+R)->输入regedit.exe,打开注册表编辑器,右键删除Winsock和Winsock2(若已删则跳过),路径如下: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services

Mr_Xiao的博客 1万+

SikuliX实战:5分钟搞定游戏挂机脚本(附防检测思路与Python集成技巧)

本文详细介绍了如何使用SikuliX快速开发游戏挂机脚本,包括环境配置、基础原理、防检测策略及Python集成技巧。通过实战案例展示如何实现自动化任务、高级防检测方案,并结合Python提升脚本性能与智能度,帮助玩家高效完成重复性游戏操作。

weixin_33228769的博客 335

注册windows系统服务

注册windows系统服务:把任意exe程序注册成windows系统服务、将bat文件或exe程序注册成windows服务

棉花糖老丫 8598

COMSOL求解器实战:如何避免非线性问题求解失败(附牛顿法调试技巧)

本文深入探讨了COMSOL求解器在处理非线性问题时常见的失败原因及解决方案。通过分析物理模型非线性特性、初始条件敏感性和求解器参数配置,提供了牛顿法调试的黄金四步法,包括模型检查、分阶段求解、参数调优和高级诊断工具应用。特别针对材料非线性、几何非线性和多物理场耦合等典型工程场景,给出了实战技巧和预防性建模策略,帮助工程师有效避免求解失败。

weixin_29284657的博客 419

DOORS需求管理实战:从汽车设计案例看模块化需求拆分技巧

本文通过一个汽车设计实战案例,深入解析了如何利用DOORS进行模块化需求拆分与管理。从捕获原始用户需求到精炼为可追踪的系统需求,再到按子系统(如自动驾驶)进行模块化拆分,文章详细展示了构建需求骨架、建立可追溯性以及实施变更控制的完整流程,帮助团队在复杂系统工程中实现从混沌到秩序的高效协同。

ww90123的博客 244

C++获取网卡信息-注册表名称

废话不多说,直接上代码: #include <WinSock2.h> #include <Iphlpapi.h> #include <iostream> using namespace std; #pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库 int main(int argc, char* argv[]) { PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTE

youyicc 1336

深入解析CAN总线BusOff故障的检测与恢复机制

本文深入解析了CAN总线BusOff故障的检测与恢复机制。BusOff是CAN节点因发送错误过多而被强制离线的一种严重状态。文章详细阐述了其触发原理,即发送错误计数器(TEC)超过255,并重点介绍了通过软件实现的快慢恢复机制,以增强网络在异常情况下的稳定性和韧性。

weixin_29158047的博客 525

在POWER BUILDER中使用WINSOCK控件

兵作战的模式,转入联合行动。 ---- 网络在计算机世界里,越来越发挥着举足轻重的作用。在WINDOWS应用程序中,处理实时通讯最常用到的还是MICROSOFT公司提供的WINSOCK控件。许多资料都细述了WINSOCK在VB中的使用方法,就连WINDOWS本身提供的hlp文件也是针对VB而写的。笔者因为实际应用的需要,琢磨出了WINSOCK控件在PB中的应用方法。好东西不敢独自享用,拿出来与大家

我的Blog 955

猫群优化算法(CSO)详解:从生物灵感到智能优化

猫群优化算法(CSO)是一种模拟猫科动物行为的群体智能优化算法。该算法基于猫的两种主要行为模式:搜寻状态(全局探索)和跟踪状态(局部开发)。CSO通过混合率(MR)动态调整两种模式的比例,实现探索与开发的平衡。算法核心包括搜寻模式的变异操作和跟踪模式的速度-位移模型,具有收敛性能好、全局搜索能力强等特点。相比传统优化算法,CSO在高维复杂问题中表现优异,已成功应用于函数优化、图像处理等多个领域。算法性能受混合率、变化域等参数影响,自适应参数策略可进一步提升优化效果。

qq_42212808的博客 617

量化交易 米筐 多因子合成(回测中使用)

多因子合成 1、因子合成 将一些相关(高、低)的因子合成一个因子 方法: 使用PCA方式(使用于较强相关性) 2、核心代码 将因子 inc_revenue_ttm 和 operating_revenue_growth_ratio_ttm 合成为一个因子 inc_operating from sklearn.decomposition import PCA pca = PCA(n_components=1) # 因子合并 fund['inc_operating'] = pca.fit_transform(fu

廷益_飞鸟的博客 1062

关于Winsock

本节介绍Winsock开发人员可用的Winsock编程注意事项,体系结构和功能。 以下列表描述了本节中的主题: Winsock编程注意事项 同时访问多个传输协议 重叠的I / O和事件对象 注册和名称解析 多点和多播语义 Internet协议版本6(IPv6) 网络位置感知服务提供商(NLA) 关于Winsock SPI   相关话题 使用Winsock Windows So...

一世豁然的专栏 341

TGAT Python:图神经网络中的动态图算法

其中,图神经网络中的动态图算法成为了研究的热点之一。在模型的 forward 方法中,通过循环调用 TGATLayer 实例来进行图神经网络的前向传播。最终,模型返回图中节点的表示向量 output,可以用于图分类等任务。TGAT 算法的核心思想是在节点之间建立注意力连接,以捕捉节点在不同时间步之间的关系。TGAT 算法通过引入注意力机制和时间信息,从而有效地对动态图数据进行建模和分析。通过以上 Python 代码,我们可以方便地构建和训练 TGAT 模型,并在图分类任务中应用它。

2301_79366435的博客 1826

如何确定 Winsock2 是否损坏并从损坏中恢复

转自:http://support.microsoft.com/?scid=kb;zh-cn;811259症状loadTOCNode(1, symptoms); 在尝试使用 Ipconfig 程序 (Ipconfig.exe) 释放或更新 IP 地址时,可能会收到下列错误消息之一。消息 1An error occurred while renewing interface

【像男人一样去战斗】︻╋████◤ 3137

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

netsh winsock reset

netsh winsock reset winsock是Windows网络编程接口,winsock工作在应用层,它提供与底层传输协议无关的高层数据传输编程接口 netsh winsock reset 是把它恢复到默认状态 简介信息 netsh winsock resetnetsh winsock reset命令,作用是重置 Winsock 目录。如果一台机器上的Winsock协议配...

CHJ_20160630的博客 724

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Windows中使用Netsh Winsock Reset命令解决网络连接问题

有人反馈电脑无法联网,Chrome、IE、TIM等无法正常使用,我检查后发现了以下情况: 1. 电脑网络适配器设置处显示网络连接正常,并且正确获取到了内网域的名称;网络的IP、掩码、DNS设置正确。 2. 电脑没有kexueshangwang;没有使用代理软件;IE的Internet选项》连接》局域网(LAN)设置》代理服务器中没有为LAN使用代理服务器。 3. 关闭了防火墙,退出所有安全防...

Dancen的专栏 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINSOCK编程 (转)

WINSOCK编程 (转)[@more@]WINSOCK编程 作者:杜黎军 发布时间:2001/01/15 文章摘要:   WINSOCK标准定义了一个DLL接口,通常叫做WINSOCK.DLL或者WSOCK32.DLL。无...

csd3176的博客 99

WINSOCK编程

WINSOCK编程 作者:杜黎军 发布时间:2001/01/15 文章摘要:  WINSOCK标准定义了一个DLL接口,通常叫做WINSOCK.DLL或者WSOCK32.DLL。无论机器上安装了哪一个DLL,只要函数的名字,参数含义以及最终的功能是相同的,应用程序就可以调用这些函数。        

CandyCat的专栏 3049

winsock 获取本地信息

#pragma comment (lib,"ws2_32.lib") #include&lt;winsock2.h&gt; #include&lt;iostream&gt; using namespace std; int main() { // winsock注册 WSAData wsaData; WORD wVersionReq=MAKEWORD(1,2); in...

Jason5563的博客 200
上一篇: 关于Winsock:重叠的I / O和事件对象
下一篇: 关于winsock:多点和多播语义
一世豁然
博客等级 码龄15年 1276粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值