函数《计算机网络与通信》课程设计获取主机名和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

DMIT:新推出美国cn2 gia线路高性能 AMD EPYC/不限流量VPS(Premium Unmetered)$179.99/月起

DMIT,最近动作频繁,前几天刚刚上架了日本lite版VPS,正在酝酿上线日本高级网络VPS,又差不多在同一时间推出了美国cn2 gia线路不限流量的美国云服务器,不过价格太过昂贵。丐版只有30M带宽,月付179.99 美元 !!目前美国云服务器已经有个4个套餐,分别是,Premium(cn2 gia线路)、Lite(普通直连)、Premium Secure(带高防的cn2 gia线路),Prem...

LOCVPS-2021年6月香港便宜vps宽带升级,充值就送代金券,其它八折优惠!

LOCVPS怎么样?LOCVPS是一家成立于2011年的稳定老牌国人商家,目前提供中国香港、韩国、美国、日本、新加坡、德国、荷兰等区域VPS服务器,所有机房Ping延迟低,国内速度优秀,非常适合建站和远程办公,所有机房Ping延迟低,国内速度优秀,非常适合做站。XEN架构产品的特点是小带宽无限流量、不超售!KVM架构是目前比较流行的虚拟化技术,大带宽,生态发展比较全面!所有大家可以根据自己业务需求...

WHloud Date鲸云数据($9.00/月), 韩国,日本,香港

WHloud Date(鲸云数据),原做大数据和软件开发的团队,现在转变成云计算服务,面对海内外用户提供中国大陆,韩国,日本,香港等多个地方节点服务。24*7小时的在线支持,较为全面的虚拟化构架以及全方面的技术支持!官方网站:https://www.whloud.com/WHloud Date 韩国BGP云主机少量补货随时可以开通,随时可以用,两小时内提交退款,可在工作日期间全额原路返回!支持pa...

ip地址为你推荐
weipin唯品金融是什么?大家基本都怎么用呢?安装程序配置服务器失败安装用友u8的数据库最后说:“安装程序配置服务器失败。参考服务器错误日志和 C:WINDOWSsqlstp.log 了解更多信息。”手机区号手机号码前怎样填写正确的国内区号?数码资源网哪个网站可以直接在线做照片?功能要齐全的`今日热点怎么删除怎么删除手机百度实时热点童之磊华硕的四核平板电脑,怎么样?qq空间打扮QQ空间打扮安全漏洞计算机一般存在哪些安全漏洞?如何快速收录谁知道怎么快速被搜索引擎快速收录啊?rewritebasehttp怎么做自动跳转https
域名服务 enom linode日本 樊云 美元争夺战 新站长网 圣诞节促销 国外在线代理 softbank邮箱 asp免费空间申请 100m独享 河南移动网 太原网通测速平台 国外视频网站有哪些 空间登录首页 宏讯 网站加速软件 太原联通测速 德隆中文网 万网主机 更多