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

tmhhost:暑假快乐,全高端线路,VPS直接8折,200G高防,美国gia日本软银韩国cn2香港cn2大带宽

tmhhost为2021年暑假开启了全场大促销,全部都是高端线路的VPS,速度快有保障。美国洛杉矶CN2 GIA+200G高防、洛杉矶三网CN2 GIA、洛杉矶CERA机房CN2 GIA,日本软银(100M带宽)、香港BGP直连200M带宽、香港三网CN2 GIA、韩国双向CN2。本次活动结束于8月31日。官方网站:https://www.tmhhost.com8折优惠码:TMH-SUMMER日本...

Cloudxtiny:£1.5/月,KVM-512MB/100GB/英国机房

Cloudxtiny是一家来自英国的主机商,提供VPS和独立服务器租用,在英国肯特自营数据中心,自己的硬件和网络(AS207059)。商家VPS主机基于KVM架构,开设在英国肯特机房,为了庆祝2021年欧洲杯决赛英格兰对意大利,商家为全场VPS主机提供50%的折扣直到7月31日,优惠后最低套餐每月1.5英镑起。我们对这场比赛有点偏见,但希望这是一场史诗般的决赛!下面列出几款主机套餐配置信息。CPU...

腾讯云轻量服务器老用户续费优惠和老用户复购活动

继阿里云服务商推出轻量服务器后,腾讯云这两年对于轻量服务器的推广力度还是比较大的。实际上对于我们大部分网友用户来说,轻量服务器对于我们网站和一般的业务来说是绝对够用的。反而有些时候轻量服务器的带宽比CVM云服务器够大,配置也够好,更有是价格也便宜,所以对于初期的网站业务来说轻量服务器是够用的。这几天UCLOUD优刻得香港服务器稳定性不佳,于是有网友也在考虑搬迁到腾讯云服务器商家,对于轻量服务器官方...

ip地址为你推荐
51自学网站网上自学网站有哪些?最好是免费的,我想学习网页设计万网核心代理万网代理商?中国万网认证核心分销商?百度抢票浏览器百度浏览器怎么抢票?今日热点怎么删除今日热点怎么卸载删除 今日热点新闻彻底卸载删彩信中心联通手机的彩信中心如何设置?开机滚动条如何关闭开机滚动条?宕机宕机是什么意思云挂机有免费的云挂机软件吗?小米手柄小米手柄能连几个手机虚拟机软件下载那里可以下载虚拟系统,又该怎么安装呢??
虚拟空间哪个好 国内免备案主机 星星海 外国空间 小米数据库 我爱水煮鱼 asp免费空间申请 泉州电信 ca187 华为云盘 shuang12 中国域名 阿里云邮箱个人版 七牛云存储 网络速度 阿里云邮箱怎么注册 九零网络 优惠服务器 冰盾ddos防火墙 远程主机强迫关闭了一个现有的连接 更多