C++ 之网络编程<一>

C++ 网络编程之初体验


Win socket 编程开始:

// test.cpp : 定义控制台应用程序的入口点。

//

#include "StdAfx.h"

#include <stdio.h>

 

#include <winsock2.h>

#pragma comment(lib,"WS2_32.lib")

 

 

void initSocket(BYTE,BYTE);//申明方法 initSocket

void cleanSocket();//申明方法 cleanSocket

 

int main()

{

       initSocket(2,2);

       //初始化 方法体

       charHost[256];

       //定义 一个长度为256 的char类型数组

       ::gethostname(Host,256);

       //获取进程所在机器的计算机的名字

       hostent*pHost=::gethostbyname(Host);

       //gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的

hostent结构指针。结构的声明与gethostaddr()中一致。

       /*结构体

              structhostent {

              char*h_name;

              char**h_aliases;

              inth_addrtype;

              inth_length;

              char**h_addr_list;

              #defineh_addr h_addr_list[0]

              };

       */

       in_addraddr;

              /*

                            structin_addr {

              in_addr_ts_addr;

              };

              结构体in_addr 用来表示一个32位的IPv4地址.

          */

       for(int i=0;;i++)

       {

              char*p=pHost->h_addr_list[i];

              if(p == NULL)

                     break;

              //memcpy()是什么?

              memcpy(&addr.S_un.S_addr,p,pHost->h_length);

              //从源 p 所指的内存地址的起始位置开始拷贝n个字节到目标

&addr.S_un.S_addr 所指的内存地址的起始位置中

              char*Ip=::inet_ntoa(addr);

              /*

              结构:   charFAR * inet_ntoa( struct in_addr in);

              功能:   将一个IP转换成一个互联网标准点分格式的字符串。

              */

              printf("\t本机IP地址%d:%s\n",i+1,Ip);

       }

 

       cleanSocket();

 

       return0;

}

 

void initSocket(BYTE minorVer,BYTE majorVer)

{

       WSADATAwsaData;

       /*

              structWSAData {

              WORDwVersion;

              WORDwHighVersion;

              charszDescription[WSADESCRIPTION_LEN+1];

              charszSystemStatus[WSASYSSTATUS_LEN+1];

              unsignedshort iMaxSockets;

              unsignedshort iMaxUdpDg;

              char*lpVendorInfo;

              };

              WSADATA结构被用来保存AfxSocketInit函数返回的WindowsSockets

初始化信息。

       */

       WORDsockVersion = MAKEWORD(minorVer,majorVer);//unsigned short

       /*

              MAKEWORD

              MAKEWORD宏 平台:SDK

              这个宏创建一个无符号16位整形,通过连接两个给定的无符号参数

。

              (注:typedef unsigned short WORD;)

              编辑本段

              函数原型

 

              WORDMAKEWORD(

              BYTEbLow, //指定新变量的低字节序;

              BYTEbHigh //指定新变量的高字节序;

              );

       */

       if(::WSAStartup(sockVersion,&wsaData)!=0)

       {

              /*返回int 整形

                     sockVersionAPI提供的调用方可使用的最高版本号.高位

字节指出副版本(修正)号,低位字节指明主版本号.

                     &wsaData指向WSADATA数据结构的指针,用来接收Windows

Sockets实现的细节.

              */

              exit(0);

       }

}

 

void cleanSocket()

{

       ::WSACleanup();//终止Winsock 2 DLL (Ws2_32.dll) 的使用.

       /*

              功能

              终止Winsock 2 DLL (Ws2_32.dll) 的使用.

              头文件

              #include<Winsock2.h>

              引用库

              #pragmacomment(lib, "ws2_32.lib")

              静态加入一个lib文件也就是库文件ws2_32.lib文件,提供相关API

的支持,否则需要动态载入ws2_32.dll。

              函数原型

              intPASCAL FAR WSACleanup (void);

              返回值

              操作成功返回值为0;否则返回值为SOCKET_ERROR,可以通过调用

WSAGetLastError获取错误代码。

              在一个多线程的环境下,WSACleanup()中止了WindowsSockets在

所有线程上的操作.

       */

}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值