• 网络编程之基本函数二


    一、WSAStartup函数

    int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData ); 
    使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。该函数执行成功后返回0。
    例:假如一个程序要使用2.1版本的Socket,那么程序代码如下
    wVersionRequested = MAKEWORD( 2, 1 ); 
    err = WSAStartup( wVersionRequested, &wsaData ); 

    二、WSADATA

      这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据。它包含Winsock.dll 执行的数据。

    结构原型:

    struct WSAData { 
    
      WORD wVersion; 
    
      WORD wHighVersion; 
    
      char szDescription[WSADESCRIPTION_LEN+1]; 
    
      char szSystemStatus[WSASYSSTATUS_LEN+1]; 
    
      unsigned short iMaxSockets; 
    
      unsigned short iMaxUdpDg; 
    
      char *lpVendorInfo;}; 
    

      WSADATA结构被用来保存函数WSAStartup返回的Windows Sockets初始化信息。

    成员:

    wVersion

      Windows Sockets DLL期望调用者使用的Windows Sockets规范的版本。 高位字节存储副版本号, 低位字节存储主版本号,可以用WORD MAKEWORD(BYTE,BYTE ) 返回这个值,例如:MAKEWORD(1,1)

    wHighVersion

      这个DLL能够支持的Windows Sockets规范的最高版本。通常它与wVersion相同。

    szDescription

      以null结尾的ASCII字符串,Windows Sockets DLL将对Windows Sockets实现的描述拷贝到这个字符串中,包括制造商标识。文本(最多可以有256个字符)可以包含任何字符,但是要注意不能包含控制字符和格式字符,应用程序对其最可能的使用方式是把它(可能被截断)显示在在状态信息中。

    szSystemStatus

      以null结尾的ASCII字符串,Windows Sockets DLL把有关的状态或配置信息拷贝到该字符串中。Windows Sockets DLL应当仅在这些信息对用户或支持人员有用时才使用它们,它不应被作为szDescription域的扩展。

    iMaxSockets

      单个进程能够打开的socket的最大数目。Windows Sockets的实现能提供一个全局的socket池,可以为任何进程分配;或者它也可以为socket分配属于进程的资源。这个数字能够很好地反映Windows Sockets DLL或网络软件的配置方式。应用程序的编写者可以通过这个数字来粗略地指明Windows Sockets的实现方式对应用程序是否有用。例如,X Windows服务器在第一次启动的时候可能会检查iMaxSockets的值:如果这个值小于8,应用程序将显示一条错误信息,指示用户重新配置网络软件(这是一种可能要使用szSystemStatus文本的场合)。显然无法保证某个应用程序能够真正分配iMaxSockets个socket,因为可能有其它WindowsSockets应用程序正在使用。

      iMaxUdpDg Windows Sockets应用程序能够发送或接收的最大的用户数据包协议(UDP)的数据包大小,以字节为单位。如果实现方式没有限制,那么iMaxUdpDg为零。在Berkeley sockets的许多实现中,对于UDP数据包有个固有的限制(在必要时被分解),大小为8192字节。Windows Sockets的实现可以对碎片重组缓冲区的分配作出限制。对于适合的WindowsSockets 实现,iMaxUdpDg的最小值为512。注意不管iMaxUdpDg的值是什么,都不推荐你发回一个比网络的最大传送单元(MTU)还大的广播数据包。(Windows Sockets API 没有提供发现MTU的机制,但是它不会小于512个字节)。WinSock2.0版中已被废弃。

      lpVendorInfo 指向销售商的数据结构的指针。这个结构的定义(如果有)超出了WindowsSockets规范的范围。WinSock2.0版中已被废弃。

    备注:

      WSAStartup 给WSADATA 结构的成员分配些列值:

      wVersion wVersionRequested 数值

      wHighVersion wVersionRequested 数值

      szDescription NULL 字符串

      szSystemStatus NULL 字符串

      iMaxSockets 100

      iMaxUdpDg 0

      lpVendorInfo NULL

    三、WSACleanup函数

    int WSACleanup (void); 
    应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源。
    三 Socket接口的检索有关域名、通信服务和协议等Internet信息的数据库函数,如
    gethostbyaddr、gethostbyname、gethostname、getprotolbyname
    getprotolbynumber、getserverbyname、getservbyport。
    1.gethostname()
      【函数原型】
    int PASCAL FAR gethostname (char FAR * name, int namelen); 
         【使用说明】
      该函数可以获取本地主机的主机名,其中:
      name:<输出>用于指向所获取的主机名的缓冲区的指针。
      Namelen:<输入>缓冲区的大小,以字节为单位。
      返回值:若无错误,返回0;否则,返回错误代吗。
    2.gethostbyname()   
    struct hostent FAR * PASCAL FAR gethostbyname(const char FAR * name); 
    
    【函数原型】
      【使用说明】
      该函数可以从主机名数据库中得到对应的“主机”。
      该函数唯一的参数name就是前面调用函数gethostname()得到的主机名。若无错误,刚返回一个指向hostent结构的批针,它可以标识一个“主机”列表。

  • 相关阅读:
    leetcode_09_Palindrome Number (easy)
    JQuery与JavaScript与Ajax三者的区别与联系
    Blockly常用函数
    JavaWeb中四大域对象
    Thymeleaf知识
    列表、字典、元组、集合的区别
    Spring Boot拦截器
    AWS路由表
    Android调试工具DDMS的使用详解
    Android 列表单选对话框
  • 原文地址:https://www.cnblogs.com/leven20061001/p/2796557.html
Copyright © 2020-2023  润新知