CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

请教。winsock如何实现ping

楼主litaoa(青云)2003-05-04 08:37:36 在 VB / 基础类 提问

怎么样用VB实现ping   一个IP地址通不通呀?!  
   
  问题点数:44、回复次数:11Top

1 楼verybelial(顶级狙击手)回复于 2003-05-04 09:19:54 得分 11

一般不用winsock用API实现比较好。Top

2 楼litaoa(青云)回复于 2003-05-04 09:51:59 得分 0

用api怎么实现呀。强人说说吧。谢谢  
  Top

3 楼litaoa(青云)回复于 2003-05-07 09:44:39 得分 0

望大哥指教。。。Top

4 楼gang75vb(初学者)回复于 2003-05-07 10:49:42 得分 0

upTop

5 楼xiaoxingchi(笨鸟)回复于 2003-05-07 11:14:52 得分 0

up  
  -----------------------------------------------------------------------  
  人在江湖,人不由已!我喜欢程序员这职业!Top

6 楼xo2000(平凡人生)回复于 2003-05-07 14:11:46 得分 11

看看这个例子吧  
  http://www.applevb.com/sourcecode/ping.zipTop

7 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2003-05-07 14:19:47 得分 22

在VB中如何使用ping命令    
  BAS   Module   模块  
  把以下代码回到   BAS   Module   模块:    
  Option   Explicit  
  Private   Const   IP_SUCCESS   As   Long   =   0  
  Private   Const   IP_STATUS_BASE   As   Long   =   11000  
  Private   Const   IP_BUF_TOO_SMALL   As   Long   =   (11000   +   1)  
  Private   Const   IP_DEST_NET_UNREACHABLE   As   Long   =   (11000   +   2)  
  Private   Const   IP_DEST_HOST_UNREACHABLE   As   Long   =   (11000   +   3)  
  Private   Const   IP_DEST_PROT_UNREACHABLE   As   Long   =   (11000   +   4)  
  Private   Const   IP_DEST_PORT_UNREACHABLE   As   Long   =   (11000   +   5)  
  Private   Const   IP_NO_RESOURCES   As   Long   =   (11000   +   6)  
  Private   Const   IP_BAD_OPTION   As   Long   =   (11000   +   7)  
  Private   Const   IP_HW_ERROR   As   Long   =   (11000   +   8)  
  Private   Const   IP_PACKET_TOO_BIG   As   Long   =   (11000   +   9)  
  Private   Const   IP_REQ_TIMED_OUT   As   Long   =   (11000   +   10)  
  Private   Const   IP_BAD_REQ   As   Long   =   (11000   +   11)  
  Private   Const   IP_BAD_ROUTE   As   Long   =   (11000   +   12)  
  Private   Const   IP_TTL_EXPIRED_TRANSIT   As   Long   =   (11000   +   13)  
  Private   Const   IP_TTL_EXPIRED_REASSEM   As   Long   =   (11000   +   14)  
  Private   Const   IP_PARAM_PROBLEM   As   Long   =   (11000   +   15)  
  Private   Const   IP_SOURCE_QUENCH   As   Long   =   (11000   +   16)  
  Private   Const   IP_OPTION_TOO_BIG   As   Long   =   (11000   +   17)  
  Private   Const   IP_BAD_DESTINATION   As   Long   =   (11000   +   18)  
  Private   Const   IP_ADDR_DELETED   As   Long   =   (11000   +   19)  
  Private   Const   IP_SPEC_MTU_CHANGE   As   Long   =   (11000   +   20)  
  Private   Const   IP_MTU_CHANGE   As   Long   =   (11000   +   21)  
  Private   Const   IP_UNLOAD   As   Long   =   (11000   +   22)  
  Private   Const   IP_ADDR_ADDED   As   Long   =   (11000   +   23)  
  Private   Const   IP_GENERAL_FAILURE   As   Long   =   (11000   +   50)  
  Private   Const   MAX_IP_STATUS   As   Long   =   (11000   +   50)  
  Private   Const   IP_PENDING   As   Long   =   (11000   +   255)  
  Private   Const   PING_TIMEOUT   As   Long   =   500  
  Private   Const   WS_VERSION_REQD   As   Long   =   &H101  
  Private   Const   MIN_SOCKETS_REQD   As   Long   =   1  
  Private   Const   SOCKET_ERROR   As   Long   =   -1  
  Private   Const   INADDR_NONE   As   Long   =   &HFFFFFFFF  
  Private   Const   MAX_WSADescription   As   Long   =   256  
  Private   Const   MAX_WSASYSStatus   As   Long   =   128  
   
  Private   Type   ICMP_OPTIONS  
  Ttl   As   Byte  
  Tos   As   Byte  
  Flags   As   Byte  
  OptionsSize   As   Byte  
  OptionsData   As   Long  
  End   Type  
   
  Public   Type   ICMP_ECHO_REPLY  
  Address   As   Long  
  status   As   Long  
  RoundTripTime   As   Long  
  DataSize   As   Long   注释:formerly   integer  
  注释:Reserved   As   Integer  
  DataPointer   As   Long  
  Options   As   ICMP_OPTIONS  
  Data   As   String   *   250  
  End   Type  
   
  Private   Type   WSADATA  
  wVersion   As   Integer  
  wHighVersion   As   Integer  
  szDescription(0   To   MAX_WSADescription)   As   Byte  
  szSystemStatus(0   To   MAX_WSASYSStatus)   As   Byte  
  wMaxSockets   As   Long  
  wMaxUDPDG   As   Long  
  dwVendorInfo   As   Long  
  End   Type  
   
  Private   Declare   Function   IcmpCreateFile   Lib   "icmp.dll"   ()   As   Long  
   
  Private   Declare   Function   IcmpCloseHandle   Lib   "icmp.dll"   (ByVal   IcmpHandle   As   Long)   As   Long  
   
  Private   Declare   Function   IcmpSendEcho   Lib   "icmp.dll"   (ByVal   IcmpHandle   As   Long,   ByVal   DestinationAddress   As   Long,   ByVal   RequestData   As   String,   ByVal   RequestSize   As   Long,   ByVal   RequestOptions   As   Long,   ReplyBuffer   As   ICMP_ECHO_REPLY,   ByVal   ReplySize   As   Long,   ByVal   Timeout   As   Long)   As   Long  
   
  Private   Declare   Function   WSAGetLastError   Lib   "WSOCK32.DLL"   ()   As   Long  
   
  Private   Declare   Function   WSAStartup   Lib   "WSOCK32.DLL"   (ByVal   wVersionRequired   As   Long,   lpWSADATA   As   WSADATA)   As   Long  
   
  Private   Declare   Function   WSACleanup   Lib   "WSOCK32.DLL"   ()   As   Long  
   
  Private   Declare   Function   gethostname   Lib   "WSOCK32.DLL"   (ByVal   szHost   As   String,   ByVal   dwHostLen   As   Long)   As   Long  
   
  Private   Declare   Function   gethostbyname   Lib   "WSOCK32.DLL"   (ByVal   szHost   As   String)   As   Long  
   
  Private   Declare   Sub   CopyMemory   Lib   "kernel32"   Alias   "RtlMoveMemory"   (xDest   As   Any,   xSource   As   Any,   ByVal   nbytes   As   Long)  
   
  Private   Declare   Function   inet_addr   Lib   "WSOCK32.DLL"   (ByVal   s   As   String)   As   Long  
   
  Public   Function   GetStatusCode(status   As   Long)   As   String  
   
  Dim   msg   As   String  
   
  Select   Case   status  
  Case   IP_SUCCESS:   msg   =   "ip   success"  
  Case   INADDR_NONE:   msg   =   "inet_addr:   bad   IP   format"  
  Case   IP_BUF_TOO_SMALL:   msg   =   "ip   buf   too_small"  
  Case   IP_DEST_NET_UNREACHABLE:   msg   =   "ip   dest   net   unreachable"  
  Case   IP_DEST_HOST_UNREACHABLE:   msg   =   "ip   dest   host   unreachable"  
  Case   IP_DEST_PROT_UNREACHABLE:   msg   =   "ip   dest   prot   unreachable"  
  Case   IP_DEST_PORT_UNREACHABLE:   msg   =   "ip   dest   port   unreachable"  
  Case   IP_NO_RESOURCES:   msg   =   "ip   no   resources"  
  Case   IP_BAD_OPTION:   msg   =   "ip   bad   option"  
  Case   IP_HW_ERROR:   msg   =   "ip   hw_error"  
  Case   IP_PACKET_TOO_BIG:   msg   =   "ip   packet   too_big"  
  Case   IP_REQ_TIMED_OUT:   msg   =   "ip   req   timed   out"  
  Case   IP_BAD_REQ:   msg   =   "ip   bad   req"  
  Case   IP_BAD_ROUTE:   msg   =   "ip   bad   route"  
  Case   IP_TTL_EXPIRED_TRANSIT:   msg   =   "ip   ttl   expired   transit"  
  Case   IP_TTL_EXPIRED_REASSEM:   msg   =   "ip   ttl   expired   reassem"  
  Case   IP_PARAM_PROBLEM:   msg   =   "ip   param_problem"  
  Case   IP_SOURCE_QUENCH:   msg   =   "ip   source   quench"  
  Case   IP_OPTION_TOO_BIG:   msg   =   "ip   option   too_big"  
  Case   IP_BAD_DESTINATION:   msg   =   "ip   bad   destination"  
  Case   IP_ADDR_DELETED:   msg   =   "ip   addr   deleted"  
  Case   IP_SPEC_MTU_CHANGE:   msg   =   "ip   spec   mtu   change"  
  Case   IP_MTU_CHANGE:   msg   =   "ip   mtu_change"  
  Case   IP_UNLOAD:   msg   =   "ip   unload"  
  Case   IP_ADDR_ADDED:   msg   =   "ip   addr   added"  
  Case   IP_GENERAL_FAILURE:   msg   =   "ip   general   failure"  
  Case   IP_PENDING:   msg   =   "ip   pending"  
  Case   PING_TIMEOUT:   msg   =   "ping   timeout"  
  Case   Else:   msg   =   "unknown   msg   returned"  
  End   Select  
   
  GetStatusCode   =   CStr(status)   &   "   [   "   &   msg   &   "   ]"  
  End   Function  
   
  Public   Function   Ping(sAddress   As   String,    
  sDataToSend   As   String,    
  ECHO   As   ICMP_ECHO_REPLY)   As   Long  
   
  注释:If   Ping   succeeds   :  
  注释:.RoundTripTime   =   time   in   ms   for   the   ping   to   complete,  
  注释:.Data   is   the   data   returned   (NULL   terminated)  
  注释:.Address   is   the   Ip   address   that   actually   replied  
  注释:.DataSize   is   the   size   of   the   string   in   .Data  
  注释:.Status   will   be   0  
  注释:  
  注释:If   Ping   fails   .Status   will   be   the   error   code  
   
  Dim   hPort   As   Long  
  Dim   dwAddress   As   Long  
   
  注释:convert   the   address   into   a   long   representation  
  dwAddress   =   inet_addr(sAddress)  
   
  注释:if   a   valid   address..  
  If   dwAddress   <>   INADDR_NONE   Then  
   
  注释:open   a   port  
  hPort   =   IcmpCreateFile()  
   
  注释:and   if   successful,  
  If   hPort   Then  
   
  注释:ping   it.  
  Call   IcmpSendEcho(hPort,   dwAddress,   sDataToSend,   Len(sDataToSend),   0,   ECHO,   Len(ECHO),   PING_TIMEOUT)  
   
  注释:return   the   status   as   ping   succes   and   close  
  Ping   =   ECHO.status  
  Call   IcmpCloseHandle(hPort)  
   
  End   If    
   
  Else:  
  注释:the   address   format   was   probably   invalid  
  Ping   =   INADDR_NONE  
   
  End   If  
   
  End   Function  
   
   
  Public   Sub   SocketsCleanup()  
   
  If   WSACleanup()   <>   0   Then  
  MsgBox   "Windows   Sockets   error   occurred   in   Cleanup.",   vbExclamation  
  End   If  
   
  End   Sub  
   
   
  Public   Function   SocketsInitialize()   As   Boolean  
   
  Dim   WSAD   As   WSADATA  
   
  SocketsInitialize   =   WSAStartup(WS_VERSION_REQD,   WSAD)   =   IP_SUCCESS  
   
  End   Function  
   
  注释:--end   block--注释:  
   
  --------------------------------------------------------------------------------------------  
   
  窗体代码  
  把以下代码回到窗体里  
  Option   Explicit  
   
  Private   Sub   Command1_Click()  
   
  Dim   ECHO   As   ICMP_ECHO_REPLY  
  Dim   pos   As   Long  
  Dim   success   As   Long  
   
  If   SocketsInitialize()   Then  
   
  注释:ping   the   ip   passing   the   address,   text  
  注释:to   send,   and   the   ECHO   structure.  
  success   =   Ping((Text1.Text),   (Text2.Text),   ECHO)  
   
  注释:display   the   results  
  Text4(0).Text   =   GetStatusCode(success)  
  Text4(1).Text   =   ECHO.Address  
  Text4(2).Text   =   ECHO.RoundTripTime   &   "   ms"  
  Text4(3).Text   =   ECHO.DataSize   &   "   bytes"  
   
  If   Left$(ECHO.Data,   1)   <>   Chr$(0)   Then  
  pos   =   InStr(ECHO.Data,   Chr$(0))  
  Text4(4).Text   =   Left$(ECHO.Data,   pos   -   1)  
  End   If  
   
  Text4(5).Text   =   ECHO.DataPointer  
   
  SocketsCleanup  
   
  Else  
   
  MsgBox   "Windows   Sockets   for   32   bit   Windows   "   &   "environments   is   not   successfully   responding."  
   
  End   If  
   
  End   Sub  
     
  Top

相关问题

  • 如何实现ping.
  • 如何用C实现PING
  • VB.net中如何实现ping的功能?
  • 如何在asp中实现ping
  • 如何实现循环ping功能
  • C++ Builder中如何实现Ping操作?
  • 如何用API实现WINSOCK的功能?
  • 如何在Windows 98 下实现 Winsock SPI????????????
  • 如何winsock实现接收邮件?
  • 如何用winsock实现ftp客户端?

关键词

  • ip
  • unreachable
  • ping
  • 实现
  • privateconst ip
  • dest
  • as long
  • bad

得分解答快速导航

  • 帖主:litaoa
  • verybelial
  • xo2000
  • lihonggen0

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo