网络编程之基本函数二

一、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结构的批针,它可以标识一个“主机”列表。

posted @ 2012-11-30 17:12  拿枪的程序员  阅读(217)  评论(0编辑  收藏  举报