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

如何用TClientSocket去判斷Server端有沒有連上線?

缺席
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-08 12:27:28 IP:61.30.xxx.xxx 未訂閱
我是使用TClientSocket元件,在Client端想一開啟程後就馬上偵測server端有沒有開啟,如果沒有開啟,client端的某個按鈕將被disable,server端被開啟,client端的按鈕馬上被enable,請問這該如何寫? 謝謝.     
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
Label1->Caption=ClientSocket1->Socket->ReceiveText();
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ClientSocket1->Address="127.0.0.1";
    ClientSocket1->Port=500;
    ClientSocket1->Active=true;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::ClientSocket1Connecting(TObject *Sender,
      TCustomWinSocket *Socket)
{
    Label3->Caption="online";
    Button1->Enabled=true;
    ClientSocket1->Socket->SendText("G");
}
//---------------------------------------------------------------------------    void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    Label3->Caption="offline";
    Button1->Enabled=false;
}
 
這個程式總是要server端要先開啟,client端才會正確反應,當我client端先開啟的話,程式就會出錯..請問這該如何修改程式? 發表人 - nlj859 於 2004/05/08 12:32:44
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-11 13:19:04 IP:210.66.xxx.xxx 未訂閱
在client的error事件中,試著加入這  
 
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
    ErrorCode = 0;
    Label3->Caption="offline";
    Button1->Enabled=false;
}
看看有沒有幫助~ 試試看~ 國泰平安
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-13 16:10:20 IP:163.28.xxx.xxx 未訂閱
似乎不行,這樣的話,如果是client先開再開server,那這樣他還是沒辦法去偵測到server是否已經連線了.. 我試過onConnect的event,但結果還是一樣.. 不曉得還有沒有其他辦法? 謝謝
hjj1103
一般會員


發表:3
回覆:26
積分:5
註冊:2002-11-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-07 11:35:12 IP:61.60.xxx.xxx 未訂閱
我的方法是使用Timer偵測。 每次Timer執行時, ClientSocket1->Active=false; ClientSocket1->Active=true; 直到沒有ClientSocket1Error,再close Timer。
系統時間:2024-05-11 18:18:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!