全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1316
推到 Plurk!
推到 Facebook!

Indy TCPServer/Cleint 的問題

缺席
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-09 15:29:09 IP:203.67.xxx.xxx 未訂閱
使用 Indy 的 TCPServer 元件時在 TCPClient connect 時可以觸發 OnConnect 的事件, 但是在 TCPClient disconnect 時, 卻不能如預期觸發 OnDisconnect 的事件, 請問是為什麼, 除了故意引發 exception 外, 有沒有方法可解. 我用 ServerSocket 及 ClientSocket 的話, 事件皆正常(OnClientConnect, OnClientDisconnect) 不會有這種異狀.    Jesse Chan
------
Jesse Chan
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-09 15:33:36 IP:203.67.xxx.xxx 未訂閱
//Server 的程式
#include 
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (IdTCPServer1->Active == false)
  {
    IdTCPServer1->Active = true;
    if (IdTCPServer1->Active == true)
      Button1->Caption = "Deactive";
  }
  else
  {
    IdTCPServer1->Active = false;
    if (IdTCPServer1->Active == false)
      Button1->Caption = "Active";
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread)
{
//不做任何事.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPServer1Disconnect(TIdPeerThread *AThread)
{
  Caption = Now().DateTimeString()   AnsiString().sprintf("  X Disconnect",AThread->ThreadID);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPServer1Connect(TIdPeerThread *AThread)
{
  Caption = Now().DateTimeString()   AnsiString().sprintf("  X Connect",AThread->ThreadID);
}
//---------------------------------------------------------------------------
 
Jesse Chan 發表人 - jessechan 於 2003/12/09 15:38:16 發表人 - jessechan 於 2003/12/09 15:41:35
------
Jesse Chan
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-09 15:36:36 IP:203.67.xxx.xxx 未訂閱
 
//Client 端的程式
#include 
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (Button1->Caption == "Connect")
  {
    IdTCPClient1->Connect(0);
    if (IdTCPClient1->Connected() == true)
      Button1->Caption = "Disconnect";
  }
  else
  {
    IdTCPClient1->Disconnect();
    if (IdTCPClient1->Connected() == false)
      Button1->Caption = "Connect";
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPClient1Disconnected(TObject *Sender)
{
  Caption = "Disconnect";  
}
//---------------------------------------------------------------------------
Jesse Chan
------
Jesse Chan
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-10 14:02:36 IP:203.67.xxx.xxx 未訂閱
昨天和包子討論一下, 知道這是 Indy 的 bug, 也就是只能知道 OnConnect, 無法知道 OnDisconnect. 包子曾 post 到 Indy 的網站上, 但是後來沒有消息, 不知道有沒有 Delphi 的高手可以看一下 source code 解決這個問題. 另外在我的 sample 中有一個錯誤, 就是在 IdTCPServer1Disconnect/Connect 中改變 Caption, 這個動作必須在 Synchronize 中完成才對, 一併提出以免下次有人和我犯一樣的錯, 因為包子沒有貼上來, 這題的分數只好欠著, 下次請你吃飯時你可以多叫一顆滷蛋.    Jesse Chan
------
Jesse Chan
系統時間:2024-05-21 8:53:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!