windowsSocket编程学习(2):一个简单的Socket程序

通过一个控制台应用程序实例来演示初始化Windows Sockets并输出得到的版本信息。

#include<iostream>
#include<winsock2.h> // 使用Winsock 2.2 版本
#pragma comment (lib,"ws2_32.lib")
#include<stdlib.h>
using  namespace std;

int main()
{
    
    WSADATA wsadata; // WSADATA结构体中主要包含了系统所支持的Winsock版本信息


     if( WSAStartup( MAKEWORD(2,2),&wsadata )!=0 ) // 初始化Winsock 2.2
    {
        cout<<"WSAStartup无法初始化!"<<endl;
         return 0;
    }
     // 使用Winsock实现网络通信
    
// 显示wsadata中的数据
    printf("Version: %d.%d\n",LOBYTE(wsadata.wVersion),HIBYTE(wsadata.wVersion)); // 注释1
    printf("High Version: %d.%d\n", LOBYTE(wsadata.wHighVersion),HIBYTE(wsadata.wHighVersion) ); // 注释2
    printf("Description: %s\n",wsadata.szDescription ); // 注释3
    printf("System Status: %s\n",wsadata.szSystemStatus ); // 注释4
    
// 最后应该做的清理工作
     if(WSACleanup()==SOCKET_ERROR)
        printf("WSACleanup出错\n");

    system("pause");

     return 0;
}



注释1:

         字段wVersion:Windows Sockets DLL期望调用者使用的Windows Sockets规范的版本,为WORD类型。高位字节中存储副版本号,地位字节中存储主版本号。调用LOBYTE()函数可以返回WORD类型数据的地位字节,从而获取主版本号;调用HIBYTE()函数可以返回WORD类型数据的高位字节,从而获取副版本号。

注释2:

字段wHighVersion:Windows Sockets DLL 可以支持的Windows Sockets 规范的最高版本。

注释3:

         字段szDescription:以null结尾的ASCLL字符串。Windows Sockets DLL将对Windows Sockets实现的描述复制到该字符串中,最多可以包含256个字符。

注释4:

         字段szSystemStatus:以null结尾的ASCLL字符串,Windows Sockets DLL将有关状态或配置信息复制到该字符串中。

 

其他字段及其含义:

         字段iMaxSockets:单个进程可以打开的最大Socket数量。Windows Sockets可以提供一个全局的Socket,为每个进程分配Socket资源。程序员可以使用该数字作为Windows Sockets是否可以被应用程序使用的原始依据。

         字段iMaxUdpDg:Windows Sockets应用程序能够发送或接受的最大UDP数据包大小,单位为字节。如果实现方式没有限制,则iMaxUdpDg等于0。

         字段lpVendorInfo:指向销售商数据结构的指针。




你可能感兴趣的:(windowsSocket编程学习(2):一个简单的Socket程序)