關於Ping時程式會卡住的問題 |
答題得分者是:GrandRURU
|
jarkin
一般會員 發表:17 回覆:7 積分:4 註冊:2006-08-15 發送簡訊給我 |
請教各位先進們..小弟我想做一支關於Ping 外部 IP的程式..也爬了許多文找到了下面的程式碼
此程式碼是當我執行Ping後cmd會一直跑...但是當我的cmd在跑的過程時程式好像會當掉一樣... 我有試過system()和shellExecuyr()但是這兩個Function沒辦法判斷程式是否執行完畢!! 也是過SendARP...但是他只能Ping內部...困擾中...是否有大大有更好的方法!!感恩!! [code cpp] String A="Lost = 0"; String B="Lost = 1"; String C; SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if (!CreatePipe(&hRead,&hWrite,&sa,0)) { ShowMessage("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 168.95.1.1" ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) { ShowMessage("Error on CreateProcess()"); return; } CloseHandle(hWrite); char buffer[4096] = {0}; DWORD bytesRead; while (true) { if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL) break; Memo1->Lines->Add(buffer); Sleep(200); } //ShowMessage(buffer); //int n = s1.Pos(A); C=buffer; if (C.Pos(A)!=0 || C.Pos(B)!=0) ShowMessage("Good"); else ShowMessage("No"); ::CloseHandle(hRead); [/code] |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
jarkin
一般會員 發表:17 回覆:7 積分:4 註冊:2006-08-15 發送簡訊給我 |
感謝大大的幫忙...真是厲害我居然沒想到要逆向思考去修改Ping參數...雖然也是
會出現停頓...所以小弟我利用ShellExecute Ping出一個txt file...再由程式去判斷.. Lost是多少...這樣比較沒有停頓的動作發生...感謝大大的協助...Thanks... ===================引 用 GrandRURU 文 章=================== 你可以善用winapi的語法 這邊有個例子 [code cpp] WinExec("Command.com /c ping -n 1 -l 1 192.168.0.1", SW_HIDE); [/code] 其它的你可以多看一下PING的參數 |
kostin
一般會員 發表:18 回覆:43 積分:22 註冊:2010-03-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |