精華區beta Programming 關於我們 聯絡資訊
錯誤事件 在連接的過程中,如果有錯誤的訊息產生,無論伺服端或客戶端Socket都會 產生一個OnError的事件。你可以撰寫OnError事件產生的內容,使錯誤事件發 生時可以做一個控制。在錯誤事件發生時,它會傳出是那一端在動作時發生了 錯誤,及其錯誤代碼。你可以在錯誤事件中做出反應,而且改變錯誤代碼為0, 以防產生一個例外(exception)。 客戶端事件 當一個客戶端Socket開啟一個連接時,會接著發生下列的事件: 1.在試圖去尋找server socket時,會產生一個OnLookup事件。此時,你不可 以改變Host,Address,Port或Service的屬性來改變你所要尋找的server socket。你 可以使用Socket屬性來存取客戶端 Windows socket 物件,並且使用其中的 SocketHandle屬性來產生會影響客戶端屬性的Windows API 呼叫。 2.Windows Socket的設定與初始是由事件來通知的。 3.當我們找到server socket時會產生OnConnecting事件。此時,這個Windows Socket物件可以透過Socket屬性來提供從另一端傳來的server socket的資訊。這 是第一次我們可以將原本是listening socket所使用的埠號和IP位址,改變成實 際連線時的埠號和位址。 4.Server此時就接到連接的要求,而client也已經完成了連接。 5.在連接建立起來後會產生一個OnConnect事件,如果你的連接需立刻透過 連接讀寫資料,你可以把它寫在OnConnect事件中。 伺服端事件(Server event) Server socket會產生兩種的連接狀態:"聽"(listening)和連接到client應用程式。 Server socket在這兩種狀態都會產生一些事件。 "聽"的事件(Event when listening) 在開始"聽"之前,會有一個OnListen事件產生。此時你可以由Socket屬性獲得 伺服端Windows socket物件,你可以透過其中的SocketHandle來做一些改變。例 如說,如果你要限制你所"聽"的這台server的IP位址,你可以把它寫在OnListen 事件中。 與客戶端連接時的事件(Event with client connections) 當server socket接到client連接的要求時,會發生以下的事件: 1.在產生server端點時,透過Windows socket控制,會產生一個OnGetSocket事 件。如果你要提供你自己的,繼承自TServerClientWinSocket的類別,你可以在 OnGetSocket中開啟,然後他就會取代原有的TServerClientWinSocket。 2.當我們開啟TServerWinSocket物件時,一個OnAccept事件會產生。這是第一 次你可以使用TServerClientWinSocket物件的屬性,來獲得連接時server端的資訊。 3.如果ServerType的狀態是stThreadBlocking,有一個OnGetThread事件會產生。 如果你要提供你自己撰寫,繼承自TServerClientThread的類別,你可以將它放在 OnGetThread中,他就會取代原本的TServerClientThread。 4.如果ServerType是stThreadBlocking,在thread開始執行時會產生一個 OnThreadStart事件。如果你要初始化這個thread,或呼叫Windows socket透過這 個連接來讀寫資料,你必須使用這個事件。 5.當client完成連接時,會產生一個OnClientConnect事件。在一個無區塊 (non-blocking)伺服端,你可以在此時開始透過連接進行讀寫的動作。 -- ※ Origin: 鳥窩 (BirdNest.AceArt.Net) ◆ From: dialup-16.ts.chu.edu.tw