使用Indy->TcpServer 在 FormClose 發生 Exception 錯誤 |
缺席
|
davidsun
初階會員 發表:57 回覆:71 積分:25 註冊:2002-04-14 發送簡訊給我 |
Greeting,
我在使用 D7 & Indy 9.0.0.14 中的 TCPServer 設計 Socket Server 時,有一個奇怪的現象,就是 每次我的 TCPServer.Active := True,當我程式要結束的時後,就會發生 Excetpion,如果 TCPServer.Active 沒有設定為 True,也就是沒有啟動 Server,當然就不會有此現象,我猜想是 Server 元件要 Terminate Thread 時發生 Exception,但是實在不知道為什麼會這樣,我的程式碼相當簡單,例如,啟動伺服器:
var Binding: TIdSocketHandle; IPList: TStrings; i: Integer; begin IPList := TStringList.Create; try IPList := GStack.LocalAddresses; IPList.Add('127.0.0.1'); for i := 0 to IPList.Count - 1 do begin Binding := OMCServer.Bindings.Add; Binding.IP := IPList.Strings[i]; Binding.Port := ServerPort.Value; end; try WriteLog(MSG_0003); OMCServer.Active := True; WriteLog(MSG_0004); btnStartServer.Enabled := False; btnStopServer.Enabled := True; except WriteLog(MSG_0005); end; finally IPList.Free; end;結束伺服器: try WriteLog(MSG_0006); OMCServer.Active := False; OMCServer.Bindings.Clear; WriteLog(MSG_0007); btnStartServer.Enabled := True; btnStopServer.Enabled := False; except WriteLog(MSG_0008); end;在伺服器的 Execute 事件中只有: var CMD: string; begin if not OMCServer.Active then Exit; CMD := AThread.Connection.ReadLn(#13, 50); if CMD = '' then Exit; CMD := uppercase(CMD); WriteLog(Format(MSG_0011, [AThread.Connection.Socket.Binding.PeerIP, CMD]));另外在 FormClose 事件中是: if OMCServer.Active then btnStopServerClick(nil); WriteLog(MSG_0002); CloseFile(fLog);上面的判斷式,用意是如果伺服器在運作中,會呼叫 StopServer Button 的 Click Event 去停止伺服器。 但是程式結束都會發生 Exception ,如下圖: 可否請各位賜教,謝謝您。 |
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
liorex
初階會員 發表:19 回覆:60 積分:32 註冊:2002-08-20 發送簡訊給我 |
|
davidsun
初階會員 發表:57 回覆:71 積分:25 註冊:2002-04-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |