線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2138
推到 Plurk!
推到 Facebook!

如何判斷ClientSocket是否連線成功?

答題得分者是:Zard
jamlee
一般會員


發表:10
回覆:5
積分:3
註冊:2004-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-16 11:18:09 IP:218.160.xxx.xxx 未訂閱
假如我先按下連線按鈕之後再按傳送資料按鈕,這樣資料可以成功傳送出去, 但是如果我把連線的程式碼搬到傳送資料按鈕裡面去,就會造成程式一執行 如果太快按傳送資料按鈕,資料好像沒送出去,等幾秒之後再按傳送資料就 可以成功傳送,我想是不是因為還沒有連線成功就傳送資料的關係,所以想 請問如何判斷ClientSocket目前的連線狀態?我想知道它是否已經成功的和 server取得連線。
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-16 14:00:35 IP:61.64.xxx.xxx 未訂閱
引言: 假如我先按下連線按鈕之後再按傳送資料按鈕,這樣資料可以成功傳送出去, 但是如果我把連線的程式碼搬到傳送資料按鈕裡面去,就會造成程式一執行 如果太快按傳送資料按鈕,資料好像沒送出去,等幾秒之後再按傳送資料就 可以成功傳送,我想是不是因為還沒有連線成功就傳送資料的關係,所以想 請問如何判斷ClientSocket目前的連線狀態?我想知道它是否已經成功的和 server取得連線。
一個比較準確的方式是利用TClientSocket會在連線後觸發的OnConnect事件, 在這裡設置一個Flag就知道是否已連線.
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
BOOL bConnected = FALSE;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// OnConnect
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  bConnected = TRUE;
}
//---------------------------------------------------------------------------
// OnDisconnect
void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  bConnected = FALSE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (bConnected)
  {
    // Send packet......
  }
}
//---------------------------------------------------------------------------
jamlee
一般會員


發表:10
回覆:5
積分:3
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-16 14:06:40 IP:218.160.xxx.xxx 未訂閱
引言:
引言: 假如我先按下連線按鈕之後再按傳送資料按鈕,這樣資料可以成功傳送出去, 但是如果我把連線的程式碼搬到傳送資料按鈕裡面去,就會造成程式一執行 如果太快按傳送資料按鈕,資料好像沒送出去,等幾秒之後再按傳送資料就 可以成功傳送,我想是不是因為還沒有連線成功就傳送資料的關係,所以想 請問如何判斷ClientSocket目前的連線狀態?我想知道它是否已經成功的和 server取得連線。
一個比較準確的方式是利用TClientSocket會在連線後觸發的OnConnect事件, 在這裡設置一個Flag就知道是否已連線.
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
BOOL bConnected = FALSE;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// OnConnect
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  bConnected = TRUE;
}
//---------------------------------------------------------------------------
// OnDisconnect
void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  bConnected = FALSE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (bConnected)
  {
    // Send packet......
  }
}
//---------------------------------------------------------------------------
我有在Connect事件中放一個ShowMessage("連線成功"),但是如果server沒開這個事件還是會被觸發,所以我覺得這個事件好像不是連線成功才會觸發的,而是連線中就會觸發了!
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-16 14:14:09 IP:61.64.xxx.xxx 未訂閱
引言: 我有在Connect事件中放一個ShowMessage("連線成功"),但是如果server沒開這個事件還是會被觸發,所以我覺得這個事件好像不是連線成功才會觸發的,而是連線中就會觸發了!
Server沒開是不會觸發這個事件的, 自己多試一下. 連線中就會觸發的是OnConnecting事件, 別搞錯了 __property TSocketNotifyEvent OnConnect = {read=FOnConnect, write=FOnConnect}; Occurs on client sockets just after the connection to the server is opened. Description Write an OnConnect event handler for a client socket to take specific action after the connection to a server socket has been established. Depending on the service, this may be the point when the socket should start reading or writing over the connection. When a client socket opens a connection, the following events occur: 1 An OnLookup event occurs prior to an attempt to locate the server socket. 2 The Windows socket is set up, and initialized for event notification. 3 An OnConnecting event occurs after the server socket is located. 4 The connection request is accepted by the server and completed by the client socket. 5 An OnConnect event occurs after the connection is established. 發表人 - zard 於 2005/01/16 14:28:18
系統時間:2024-05-06 3:18:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!