IdTCPClient 如何1對多進行詢問資料動作 |
答題得分者是:cxh17895
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
問題說明:由PC透過IdTCPClient去詢問機台的狀態,因為機台那邊韌體已經修改因此希望能有PC端軟體去詢問機台狀態 ,必須要詢問很多台機台,目前做法是用Thread+輪詢的模式,但是因為重複Client1.Connect;與Client1.Disconnect;造 成機台每次增加連線後記憶體都會被吃掉,吃光後機台連線部分就當機,想請教各位大大有什麼辦法能夠讓IdTCPClient元件不用重複連線 斷線 就能夠連結機台並且詢問資料。
procedure TForm1.Button1Click(Sender: TObject); begin MyThread(CTOC,Nil); //程式進入點 end; end. procedure TForm1.CTOC(Sender: TObject); Var I,J:Integer; begin J:= C_Count; //紀錄有幾筆IP資料 try //If C_Count<>0 then For I:=1 to J do begin NCC:=I; //Target Client1.CheckForGracefulDisconnect(False); Client1.Disconnect; Client1.Host:=C_ip[I]; //由陣列中取出IP Client1.Port:=3000; Client1.Connect; View(!0022); //詢問機台狀態 Client1.Disconnect; end; except end; end; Procedure TForm.View(S:String); var X:string; begin try //尚未連線例外處理 Client1.Write(s); //寫入TCP/IP 指令,寫入字串 Client1.ReadFromStack(False,1,False); //判斷是否有回應資料如果沒有則不讀取傳回數值 While Client1.InputBuffer.Size>0 do Begin X:=Client1.ReadLn(#13); Decoder(X); //將收到資料進行拆解 End; except End; End; Procedure TForm.Decoder(S:string); //將傳回值依照指令顯示 Var sTmp:string; Tmp:Integer; Begin try sTmp:= S[2] S[3]; Case StrToInt(sTmp) of 00: begin Case Tmp of //指令相對應處理 0000: Begin //處理1 end; 0001: Begin //處理2 end; 0002: Begin //處理3 end; Else end; end; end; except end; End;數學 程式 經驗=不懂^^ |
jaya
初階會員 發表:9 回覆:70 積分:30 註冊:2002-05-22 發送簡訊給我 |
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
|
cxh17895
初階會員 發表:13 回覆:37 積分:25 註冊:2003-03-19 發送簡訊給我 |
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |