錯誤事件
在連接的過程中,如果有錯誤的訊息產生,無論伺服端或客戶端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