函数《计算机网络与通信》课程设计获取主机名和ip地址

ip地址  时间:2021-03-01  阅读:()

《计算机网络与通信》课程设计获取主机名和IP地址目录

《计算机网络与通信》课程设计获取主机名和IP地址

1 绪言

M crosft isu  l C+是M  r  oft公司推出的开发W n32环境程序面向对象的可视化集成编程系统它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2WinSock网络、  D控制界面。它以拥有“语法高亮” Int  l l iSen e(自动完成功能 以及高级除错功能而著称比如 它允许用户进行远程调试单步执行等。还有允许用户在调试期间重新编译被修改的代码而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称这些特征明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著

在网络编程中,像获取主机名和I 地址这样的基本应用是必不可少的,这些基本的应用通过适当改变可以很容易地应用到网络软件中因此,获取主机名和

I 地址是用现实意义的。

方案的论证及选择

方案一用W  dosA I进行设计。Wind w PI可以很容易获取主机名和IP地址但是在窗口设计是却显得比较繁琐

方案二用FC进行设计用MFC设计可以更容易的设计显示界面在获取主机名和IP地址方面也比不复杂。

综上选择方案二

 重要结构和函数

3  1函数geth stname

函数原型为int gethostnae(  ar nam int  ael  n 

其中参数nae是一个指向将要存放主机名的缓冲区的指针,namele用于指定缓冲区的长度。该函数把本地主机名存放入由nae参数指定的缓冲区中。返回的主机名是一个以ULL结束的字符串。主机名的形式取决于W  dows Sck   实现它可能是一个简单的主机名,或者是一个域名然而,返回的名字必定可以在  t  ost yname(和WSAA yncG tH stByName( 中使用。如果没有错误发生 ge  hos   ae 返回0否则它返回SOCK  T_ERRO

  2 函数get  os  byna

函数原型为

 truct hos  ent g  tho   byna     s  chara  dr ;

其中 a  dr为指向主机名的指针 它一般有函数  t  o  tn m返回该函数返回对应于给定主机名的包含主机名字和地址信息的h stent结构指针,该结构的格式如下:str  c  hos    t {char _namcha  *hal  asesint add  ty  e;i  th_len  thch    _ ddr_l is  

《计算机网络与通信》课程设计获取主机名和IP地址

#d  fi  e h_  d  had  _  s  0]

}

其中,h_ ame是地址的正式名称 h_  ia   是空字节-地址的预备名称的指针 h_ad  rtyp 地址类型通常是AF N ET;h_ ength地址的比特长度 a  drl ist是零字节—主机网络地址指针 网络字节顺序h_ad  r—h_add  ist中的第一地址

需要注意的是  th  t y  a  函数属于W   ockAPI库而在使用WinSockA 之前必须调用SA—S  artu 函数只有该函数成功返回 表示应用程序与WinSock库成功地建立起连接 应用程序才可以调用其他Windows Sockets DLL中的函数。 当程序将要结束时又必须调用WSAClea  up函数进行清理工作 以便释放其占用的资源SC  anup 函数用来结束W   o  o   e   DL 的使用。

3。 3函数 netn  oa

函数原型为:

 ha  FR*   e _  o   s   u    _add  i ;

该函数将一个 P转换成一个互联网标准点分格式的字符串 in为一个表示I     net主机地址的结构如果正确,返回一个字符指针,指向一块存储着点分格式IP地址的静态缓冲区(同一线程内共享此内存)错误返回 

L。

  4函数 ex ut

函数原型为

BOOLT  O t(

HD   c,i   n ta  t,i  t nY tar  

LPCTS   lpSt  i  g

 nt  bSt  i  g

 

Hd  设备环境的句柄

XSt  r  :指定用于字符串对齐的基准点的逻辑坐标。nY t    指定用于字符串对齐的基准点的逻辑坐标。

 pS  ring:指向将被绘制字符串的指针。此字符串不必为以0结束的,因为cbStr  ng中指定了字符串的长度cbSt  ing指定了字符串的长度

该函数用当前选择的字体、背景颜色和正文颜色将一个字符串写到指定位置如果函数调用成功,返回值为非零值如果函数调用失败,返回值为0。 。 5函数mecp 

函数原型为:voi  mcp   o  d  e  t const voi  s  c,size_t  

该函数从源sr 所指的内存地址的起始位置开始拷贝n个字节到目标de t所指的内存地址的起始位置中。

《计算机网络与通信》课程设计获取主机名和IP地址

3。 WSADa  a结构

结构原型为s  ru  tWADat  

WORD wersi  n;

WOD wi  hVersi  nchar  zD    i t  o [S S  P  ON  N  ];

 h  r szSystem ta  u  SASYSS ATU _LEN+1 ;un   gned  hort iMa  Sockets;

 nsig  ed short axUdpDg;char lpVen  or   fo

 wV r   o  W ndows    k  t  D LL期望调用者使用的indow    ke  s规范的版本高位字节存储副版本号 低位字节存储主版本号可以用WO MA EO R D YTE BYT E  返回这个值,例如:A E(1  

HighVersi  n这个DLL能够支持的W n  ows So   ets规范的最高版本。通常它与we rs i  n相同。szDescription:以n   l结尾的SI 字符串,Window S ketsLL将对Win  os So   e  s实现的描述拷贝到这个字符串中,包括制造商标识文本最多可以有2  个字符)可以包含任何字符但是要注意不能包含控制字符和格式字符,应用程序对其最可能的使用方式是把它(可能被截断显示在在状态信息中

  Sy  tem tatus 以nul l结尾的ASCI 字符串,Wi  dowsSockets DLL把有关的状态或配置信息拷贝到该字符串中。W ndows Soc  ts D  L应当仅在这些信息对用户或支持人员有用时才使用它们 它不应被作为szescript  on域的扩展。i xSo   e  s单个进程能够打开的 oc   的最大数目。Win  ws So   e  的实现能提供一个全局的s  ket池可以为任何进程分配;或者它也可以为 ck  t分配属于进程的资源。这个数字能够很好地反映Wi  dos S  ke   D  L或网络软件的配置方式应用程序的编写者可以通过这个数字来粗略地指明W nd ws    ket 的实现方式对应用程序是否有用。例如 i  dows服务器在第一次启动的时候可能会检查iMaxSockets的值如果这个值小于8应用程序将显示一条错误信息指示用户重新配置网络软件这是一种可能要使用   ystemStatus文本的场合 。显然无法保证某个应用程序能够真正分配 MaxSoc  e  s个soc  t,因为可能有其它W  d wsSoc  e  s应用程序正在使用i  Ud DgWin   Sc   t 应用程序能够发送或接收的最大的用户数据包协议UDP 的数据包大小 以字节为单位。如果实现方式没有限制那么iMaxU  Dg为零。在 erke  ey sock  ts的许多实现中对于数据包有个固有的限制在必要时被分解 大小为  92字节WindosSock   的实现可以对碎片重组缓冲区的分配作出限制。对于适合的Win  ows  o  k  t  实现,  Maxd 的最小值为512注意不管 MaxUdpDg的值是什么都不推荐你发回一个比网络的最大传送单

《计算机网络与通信》课程设计获取主机名和IP地址

元M U)还大的广播数据包。 (in  ows Sckets AP 没有提供发现

TU的机制,但是它不会小于51 个字节 。W n  ock2。 版中已被废弃。

 pe  d   In  o:指向销售商的数据结构的指针。这个结构的定义如果有超出了W  dowsSo  kets规范的范围。W nSoc  。 0版中已被废弃。

设计过程

4。 1 新建对话框

启动Visual C++ 6。 ,新建对话框应用程序,工程名为sa  j in对话框标题改为“主机名和 P地址”。

。  添加控件

删除掉对话框模板上的控件,添加新控件,如下表所示。

表 控件及其属性一览表

添加完控件后的对话框模板如下图所示。

图1添加完控件后的对话框模板图

4。 添加成员变量

打开ClassW zar对话框的Mmb   Var  ables标签 为下列

《计算机网络与通信》课程设计获取主机名和IP地址

控件添加成员变量。如下表所示。

表2控件及变量属性

。 4为控件添加映射消息

选择M C Cla  Wiza  d对话框的M s   ge Ma s标签为以下控件添加映射消息。如下表所示。

表3 控件映射消息

45定义函数

在 an  i  D  gh中定义一个r w函数。

  bl  c

 oi  r ();

4  添加代码

在  n  i  Dlg。 cpp文件中添加代码,实现功能。

添加程序代码如下

 oid CS  nj inlg:  OnBu  ton1 )

/ TO A d  our contr l  o   fi  a  io  andle  cde  er 

Inv  l  da    ;

v id CS  nj inDlg :n   t  on2 

// TODO Add  our co  tr l notif  catio  han   ercode her 

nOK  ;

}

《计算机网络与通信》课程设计获取主机名和IP地址v  dC an  i  Dlg: :On e  k1 )

//TODO  d  ur cont  o  notif  cat  on h  n  l rcode her 

mC   = mC k1;/初始化

Dra  

vo  d CS   j   Dl : :Dr w(

l ientDC d (thi   

 n  height

C  o  t fon  ;

 eigh     

i  (mCh  1

  ont CreateF   (2  10 0  FW_NORML fal e fa  se,false,

GB   12CR    EVICE_PR IS,

  I _DEFAULT  ECIS DE L_QUA  T

EF  _PITCH ”宋体" ;

else

    tCreat   o  t 20   ,0 F_NOMA,f  se false  al  e,

 GB2312CHARS  T OUT_D VICE_PR  CI  

CLI _EFALT_ REC  S D  AU LT_QUALITY,

 EFALTPI CH,”楷体_GB2312” 

Rec   e  t 1   25 3     6)

 c。 Fi  lSol  dR  c  &rec  ,RGB(  5 210,20  )

 c  e  ectO  e  t fon   ;d    et  kMod (TRASPAR  NT)

//初始化如果不初始化 以下代码将无法执行

WAD  ta d   ai  (WSS  artu  MAKEOD(    ),&data !=)

 c。 T  Out(2   4 , 初始化错误无法获取主机信息。   

}

  a  h st  55 

/获取主机名

《计算机网络与通信》课程设计获取主机名和IP地址

  ge  hostname hos   sizef host )==SOC  E _RROR)

  Te  t t    5, 无法获取主机名” 

}e   

{

 c Tex  t 2   45 本机主机名为:”)

dc。 Tex ut  5 75 hos   ;

}

//获取计算机   g   hostb   ame也需要初始化上面已初始化struct ho  te  t = ethostb  name hos   if(p==

 cT x Out 25,45 无法获取计算机主机名及IP。  ”)

}else

{

/本机IP利用循环输出本机所有IPfor i  t  =0;-〉 hadd l ist  i !=0 i++

struct  n  d  inmm py(& n p〉 _  dr_l   t i ,sizeof(s  ruct n_ d  r))dcTex ut  ,heigh     + )height/3 ”块网卡IP为 ”  //除以只能正常

//显示两个 P,要想显示多个 P地址还需添加一个计算IP地址个数的循环

d  。  extOu  75,h  ig  t i+ )heigh  /3, i  et  a i   

WSC  an  p( ;

}

程序说明 函数nB  tton1 调用In  al ida   实现擦除功能 函数On  utton1 调用OOK(实现退出功能 OnCh     )作为触发主要功能程序ra()运行的函数Draw )函数定义了一个Cl  en DC类的对象dc和一个f nt类的对象font。定义对象dc来实现将所获得的主机名和IP地址显示在对话框上定义对象  nt来设置字体样式。  设计icon并运行程序

在 e  ourc Vie中擦除原ic ,为自己设计一个  on。然后

《计算机网络与通信》课程设计获取主机名和IP地址

将程序编译并链接,运行程序查看运行结果。

 程序运行结果及分析

程序运行的最终效果如图所示。

图2 最终效果图

点击运行后,调用  aw  函数,r   函数调用get  os   ()和ge   yho   name(得到本地主机名和IP地址 并调用TextOu 显示在窗口的指定位置。

6心得体会

本次课设实现了获取本地主机名和IP地址的功能,并用基本对话框显示所获得的结果,可以说是成功的。有一个小缺点是要使程序显示出主机名和 P地址是通过点击复选框这不符合通常我们都是点击按钮的习惯但总体上我以为是成功的

为了做这个课设我确实花了一番心思。虽说有语言的基础但实际上从我拿到题目查资料到最终做出来,我有一种从零学起的感觉。这主要是因为VC+内容太多一时之间难以接受这么多。 当然这也从另一方面反映了VC++功能之强大,对这一点还从我查资料的过程中有所体会。这次课设最大的收获可以说是更进一步了解了什么是学习,最大的进步是学会了如何面对问题。以前遇到问题,我通常都会变得心浮气躁,甚至会想“罢工”,但这一次却没有。这一次的课设过程还是我的一个新认识的落实。说实话我是这学期才明白“钻研”是什么意思,我觉得所谓“钻研”其实和“死磕"很有点像,只不过“钻研"需要心平气和,因为不心平气和就不容易长久。我觉得我这次的课设就有点在和V “死磕的感觉。

参考文献

[1]管皓高永丽别样诠释—一个Visul C+老鸟 0年学习与开发心得北京:北京航空航天大学出版社,2012  11

梁海英Vi   l ++程序设计北京清华大学出版社 013

3唐文超   ua  网络编程北京清华大学出版社 0 3

搬瓦工(季付46.7美元)新增荷兰(联通线路)VPS,2.5-10Gbps

搬瓦工最近新增了荷兰机房中国联通(AS9929、AS4837)线路的VPS产品,选项为NL - China Unicom Amsterdam(ENUL_9),与日本软银和洛杉矶(DC06)CN2 GIA配置一致可以互换,属于高端系列,2.5Gbps-10Gbps大带宽,最低季付46.7美元起。搬瓦工VPS隶属于老牌IT7公司旗下,主要提供基于KVM架构VPS主机,数据中心包括美国洛杉矶、凤凰城、纽...

老薛主机入门建站月付34/月,年付345元,半价香港VPS主机

老薛主机怎么样?老薛主机这个商家有存在有一些年头。如果没有记错的话,早年老薛主机是做虚拟主机业务的,还算不错在异常激烈的市场中生存到现在,应该算是在众多商家中早期积累到一定的用户群的,主打小众个人网站业务所以能持续到现在。这不,站长看到商家有在进行夏季促销,比如我们很多网友可能有需要的香港vps主机季度及以上可以半价优惠,如果有在选择不同主机商的香港机房的可以看看老薛主机商家的香港vps。点击进入...

免费注册宝塔面板账户赠送价值3188礼包适合购买抵扣折扣

对于一般的用户来说,我们使用宝塔面板免费版本功能还是足够的,如果我们有需要付费插件和专业版的功能,且需要的插件比较多,实际上且长期使用的话,还是购买付费专业版或者企业版本划算一些。昨天也有在文章中分享年中促销活动。如今我们是否会发现,我们在安装宝塔面板后是必须强制我们登录账户的,否则一直有弹出登录界面,我们还是注册一个账户比较好。反正免费注册宝塔账户还有代金券赠送。 新注册宝塔账户送代金券我们注册...

ip地址为你推荐
ip地址是什么什么是IP地址和DNS地址?万维读者网用QQ邮箱向《读者》投稿具体格式明星论坛怎么建免费的论坛网站?手机区号手机号码+86是移动区号还是联通的区号?godaddy通过什么网址可以查godaddy的域名信息xp系统停止服务XP系统停止服务后电脑怎么办?宕机何谓宕机?三星s8什么时候上市三星s8什么时候首发微信电话本怎么用如何启用微信通讯录域名库想自己买一个域名,然后自己做一个网站,挂上去。请问基本流程是什么样的?
yaokan永久域名经常更换 域名查询工具 raksmart 电影服务器 免费ftp空间 Hello图床 godaddy域名优惠码 godaddy web服务器架设软件 最好的空间 全站静态化 河南m值兑换 卡巴斯基试用版 卡巴斯基是免费的吗 服务器是干什么用的 石家庄服务器托管 永久免费空间 中国联通宽带测试 新疆服务器 腾讯云平台 更多