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

趣米云月付460元,香港CN2云服务器VPS月付低至18元

趣米云早期为做技术起家,为3家IDC提供技术服务2年多,目前商家在售的服务有香港vps、香港独立服务器、香港站群服务器等,线路方面都是目前最优质的CN2,直连大陆,延时非常低,适合做站,目前商家正在做七月优惠活动,VPS低至18元,价格算是比较便宜的了。趣米云vps优惠套餐:KVM虚拟架构,香港沙田机房,线路采用三网(电信,联通,移动)回程电信cn2、cn2 gia优质网络,延迟低,速度快。自行封...

易探云美国云服务器评测,主机低至33元/月,336元/年

美国服务器哪家平台好?美国服务器无需备案,即开即用,上线快。美国服务器多数带防御,且有时候项目运营的时候,防御能力是用户考虑的重点,特别是网站容易受到攻击的行业。现在有那么多美国一年服务器,哪家的美国云服务器好呢?美国服务器用哪家好?这里推荐易探云,有美国BGP、美国CN2、美国高防、美国GIA等云服务器,线路优化的不错。易探云刚好就是做香港及美国云服务器的主要商家之一,我们来看一下易探云美国云服...

提速啦 韩国服务器 E3 16G 3IP 450元/月 韩国站群服务器 E3 16G 253IP 1100元/月

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

ip地址为你推荐
行业关键词如何进行关键词分析?暴风影音怎么截图暴风影音3 如何截图怎么在qq空间里添加背景音乐如何在QQ空间中添加背景音乐百度抢票浏览器百度浏览器怎么抢票?1433端口1433端口怎么打开数据库损坏数据库损坏是怎么回事啊?免费免费建站我想建一个自己的免费网站,但不知道那里有..宕机人们说的宕机是什么意思263企业邮箱设置263企业邮箱如何修改密码关闭qq相册图标怎样熄灭QQ相册图标
mysql虚拟主机 vps是什么 息壤主机 网盘申请 有益网络 空间论坛 admit的用法 老左正传 酷番云 免费网页空间 视频服务器是什么 数据库空间 空间服务器 godaddy空间 hdsky 建站论坛 WHMCS 美国vpn服务器 木马检测 海尔t68驱动 更多