如何用CB实现ping

zhngxVPP 2006-08-24 11:17:48
各位大虾,我现在遇到一个难题,当学习CB,老师就让我写个Ping程序!
要求:
输入: 目标主机地址;ping次数;ping包的大小;ping包的类型;ping包发送时间间隔;

输出:成功Ping次数;失败ping次数;最大时间延迟;最小时间延迟;平均延迟;

小弟我一点思路都没有;请各位大虾指点迷津!!!!用什么空间能实现,还是直接写地层的代码啊!!请说的详细点!
...全文
687 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbkopoky 2007-02-17
  • 打赏
  • 举报
回复
有一个香港和悦网络电话的源文件 ,有兴趣妨进入我的BLOG看看
laowang2 2006-12-30
  • 打赏
  • 举报
回复
mark
truelove7283159 2006-12-07
  • 打赏
  • 举报
回复
up
wood542344 2006-12-07
  • 打赏
  • 举报
回复
void __fastcall TTfrmPing::btnPingClick(TObject *Sender)
{
int i;

ICMP->OnReply = ICMPReply;
ICMP->ReceiveTimeout = 1000;
btnPing->Enabled = False;

try
{
ICMP->Host = edtHost->Text;

for(i = 1; i <= 4; i++)
{
ICMP->Ping();
Application->ProcessMessages();
// Sleep(1000);
}
}
__finally
{
btnPing->Enabled = True;
}
}
void __fastcall TTfrmPing::ICMPReply(TComponent *ASender,
const TReplyStatus &AReplyStatus)
{
AnsiString sTime, result[5];

// TODO: Check for error on ping reply (ReplyStatus->MsgType?)
if(AReplyStatus.MsRoundTripTime == 0)
{
sTime = "<1";
}
else
{
sTime = "=";
}

result[0] = IntToStr(AReplyStatus.BytesReceived);
result[1] = AReplyStatus.FromIpAddress;
result[2] = IntToStr((int)AReplyStatus.SequenceId);
result[3] = IntToStr((int)AReplyStatus.TimeToLive);
result[4] = sTime;
result[5] = IntToStr(AReplyStatus.MsRoundTripTime);

lstReplies->Items->Add(result[0] + " bytes from " + result[1] +
": icmp_seq=" + result[2] + " ttl=" + result[3] +
" time" + result[4] + result[5] + " ms");
}
在BCB安装盘里有。
daydayup234 2006-12-07
  • 打赏
  • 举报
回复
typedef void* (__import IcmpCreateFile)(void);
typedef int (__import IcmpCloseHandle)(void*);
typedef unsigned long (__import IcmpSendEcho)(void *,unsigned long,void far*,unsigned short,ip_option_information*,void far*,unsigned long,unsigned long);
IcmpCreateFile *Func1;
IcmpSendEcho *Func2;
IcmpCloseHandle *Func3;
daydayup234 2006-12-07
  • 打赏
  • 举报
回复
void Tmain_::ping(String ipAddr)
{
HINSTANCE hIcmpdll;
hIcmpdll=LoadLibrary("icmp.dll");if(hIcmpdll==NULL){FreeLibrary(hIcmpdll);return;}
WSAData wsadata;// #include "winsock2.h"
WSAStartup(2,&wsadata);
HANDLE hIcmp;
(FARPROC &)Func1=GetProcAddress(hIcmpdll,"IcmpCreateFile");
hIcmp=Func1();
unsigned long Res;
int size=sizeof(icmp_echo_reply)+8; ////minimum 8 byte icmp packet (just header)
unsigned char * buff=new unsigned char[size];
(FARPROC &)Func2=GetProcAddress(hIcmpdll,"IcmpSendEcho");
icmp_echo_reply* iep=(icmp_echo_reply*)&buff;
iep->RoundTripTime = 0xffffffff;
Res=Func2(hIcmp,inet_addr(ipAddr.c_str()),0,0,0,buff,size,ComboBox1->Text.ToIntDef(10));
unsigned long LRoundTripTime;
LRoundTripTime=iep->RoundTripTime;
delete [] buff;buff=0;
if(Res>0
{
TListItem* listitem;
listitem=ListView1->Items->Add();
listitem->Caption=ipAddr;
listitem->SubItems->Add(LRoundTripTime);
}
(FARPROC &)Func3=GetProcAddress(hIcmpdll,"IcmpCloseHandle");
Func3(hIcmp);
WSACleanup();
FreeLibrary(hIcmpdll);
}
daydayup234 2006-12-07
  • 打赏
  • 举报
回复
关键函数IcmpSendEcho:WINSOCK API函数,通过一个IP地址Ping一个机器,在ICMP.dll中
ICMP全称Internet Control Message Protocol(网际控制信息协议)。ICMP∈TCP/IP协议包
要求 主机没有被配置为过滤ICMP形式
Y___Y 2006-12-06
  • 打赏
  • 举报
回复
可运用命令行ping后输到程序中,最简单
Rojo.Cai 2006-12-06
  • 打赏
  • 举报
回复
ben3(炮弹) 说得对,,,BCB6下面就有,,,BCB5 没有得
Andrionda 2006-09-29
  • 打赏
  • 举报
回复
《C++Builder高级编程》黄皮的那本书上有ping的例子
ben3 2006-08-25
  • 打赏
  • 举报
回复
参考indy 控件的例子Program Files\Borland\CBuilder6\Examples\Indy\PingGUI

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧