各位高手,如何用MFC实现ping的命令啊?

sal 2005-08-07 10:39:48
我是新手,正在做一个ping的程序,就是输入要ping的ip地址,点确定,即可返回ping的结果这种程序,但是我不知道用MFC的方法生成icmp原始套接字啊,特请教各位朋友。谢谢!
...全文
972 点赞 收藏 30
写回复
30 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sal 2005-10-20
偶有几天没来了,没想到讨论这么激烈,偶用的VC.net,没感觉MFC和raw socket有什么冲突啊。偶是新手啊,没使用命令行,而是创建了普通的一个对话框程序,输入ip地址,点击开始,然后在edit control里显示ping的结果,基本的功能已经实现了,但感觉ping的结果time值要么是0ms,要么是10的倍数,而ttl值和windows里自带的ping的结果对不上。
回复
fisker0303 2005-10-19
但MFC不是基于命令行的,有些地方要改一改。
回复
fisker0303 2005-10-19
哪儿有的事,MFC和raw socket没啥冲突的地方,socket2当然也可以用的。
回复
chjshen 2005-10-19
好像是在vc6的mfc里是没有办法实现raw socket 的吧,我记得mcf 只支持socket 1.1 而不支持 socket 2
呀看来得用原始的方法了研究ing

回复
i_noname 2005-09-24
msdn下有个例子的,你找一下ping sample
回复
sal 2005-09-24
代码里的原始套接字是没有用到mfc的,是自己建的。
回复
gnixemos 2005-09-22
mfc可以用row socket吗
回复
sal 2005-09-21
guyue6670,我的qq号是173940511,我们可以讨论一下,呵呵
回复
美丽海洋 2005-09-19
我也正做这个问题,不知道怎么实现,楼主能不能大家共享一下你的成果。
回复
sal 2005-09-19
前一段时间有事没写程序。我现在还没研究到超时这一步,惭愧啊。我想问问fisher0303,
typedef struct ip_optionhdr
{
unsigned char code; // Option type
unsigned char len; // Length of option hdr
unsigned char ptr; // Offset into options
unsigned long addr[9]; // List of IP addrs
}IpOptionHeader;
这个结构是什么意思啊,是在返回数据报中紧接着ip数据报的报头以后的部分吗,如果是的话,这部分记录的数据起什么作用,尤其是addr[9]这个数组,这9个ip地址是哪儿来的啊?因为DecodeIPOption这个函数我看不懂啊。谢谢!
回复
sal 2005-09-19
我正在做啊,连最基本的功能都还没实现呢,我的基本思路就是在VC中,照搬fisher0303提供的代码写进去,不过有些函数都封装在类中了,到时还不知道行不行呢。
回复
nkwesley 2005-09-19
我有例子
回复
flyjzy5 2005-09-15
不好意思,说错了,超时设置用-w。我的意思是,系统自带的ping最小间隔好像是1s,如何设置<1s呢?
回复
flyjzy5 2005-09-15
bobob(静思--潜心研究PDF) ,你这是一个新的方案,但是怎样设置超时呢?
回复
Tranquillo 2005-08-09
在MFC框架下直接用原始套接字,有什么问题
回复
102442 2005-08-09
22
回复
sal 2005-08-09
我现在正是在MFC的框架下使用fisher0303提供的这段代码,程序还没有写完,现在还看不出有什么不妥,呵呵。
回复
Practise_Think 2005-08-08
用代码实现ping的协议
回复
bobob 2005-08-08
用管道,m_strResult里面保存的是执行结果
{

SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("Error On CreatePipe()");
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,"ping 127.0.0.1 -t"
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
DWORD dw = GetLastError();
MessageBox("Error on CreateProcess()");
return;
}
CloseHandle(hWrite);

char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
m_strResult+= buffer;
UpdateData(false);
Sleep(200);
}
}
回复
rylante 2005-08-08
ShellExecute
回复
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-08-07 10:39
社区公告
暂无公告