使用ClientSocket連接MOXA NPort偵測斷線與重新連線 |
尚未結案
|
lkkplayer
一般會員 發表:26 回覆:59 積分:17 註冊:2006-11-22 發送簡訊給我 |
請教各位大大,我使用ClientSocket連接MOXA NPort
剛開啟時,正常與MOXA NPort連線後,如果將MOXA NPort斷電 ClientSocket並不知道斷線了,原本以為是使用ClientSocket.Socket.Connected去判斷 但是我爬文後,這個值是最後一次連結的狀態,我之前有連成功就always是true 請問還有其他方式可以偵測嗎?另外重新連線是否就是將ClientSocket.Active:=false; 再ClientSocket.Active:=true;就是重新連線。 程式如下: procedure TForm1.FormShow(Sender: TObject); begin try NPortSocket1.Active:=false; NPortSocket1.Host:= '192.168.1.123'; NPortSocket1.Port := 4001; NPortSocket1.Active := True; except on E:exception do begin showMsg('NPortSocket1 開啟失敗:' E.Message); end; end; end; procedure TForm1.NPortSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); var strTime:string; begin strTime:=FormatDateTime('yyyy/mm/dd hh:nn:ss-->', Now()); ShowMsg( strTime NPortSocket1.Host ' 已連線'); end; procedure TForm1.NPortSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin showMsg(NPortSocket1.Host ' 已斷線'); end; procedure TForm1.NPortSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin showMsg('NPortSocket1 錯誤:' IntTostr(ErrorCode)); ErrorCode:=0; NPortSocket1.Close; end; procedure TForm1.NPortSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var buf : Array[1..40960] of char; nConnect:integer; begin with TForm1 do begin sleep(50); nConnect:=NPortSocket1.Socket.ReceiveBuf(buf, sizeof(buf)); end end; procedure TForm1.tmTimer(Sender: TObject); begin if not NPortSocket1.Socket.Connected then begin showMsg('NPort1:<' NPortSocket1.Host '> 已斷線'); showMsg('重新連線NPort1:<' NPortSocket1.Host '>'); try NPortSocket1.Active:=false; NPortSocket1.Host:='192.168.1.123'; NPortSocket1.Port := 4001; NPortSocket1.Active := True; except on E:exception do begin showMsg('NPortSocket1 開啟失敗:' E.Message); end; end; end; end; |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
只有採用 c 與 s 互相送心跳的通訊,才容易快速的得知問題。 要多快得知取決於送心跳的速度。每5秒送一次的話,就是每5秒就會得到一個 error 或是 disconnected 的結果。如何簡單快速的來實驗? 就是試著突然拔網路線看看,很多時候程式還是不會發現當當時沒有封包被送出時。
以上是寶貴經驗,還有更深的網路問題,一時半刻無法解通。 請參考
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |