文檔標題:如何編寫用TCP/IP的通訊程式 作者: 佚名
關 鍵 字:TCP/IP,通訊程式,Socket,TServerSocket,TClientSocket
本文轉自 C++Builder 研究 - http://www.ccrun.com/article/go.asp?i=395&d=r0vn4p
最近在網上不斷的看到有人問如何用BCB的TServerSocket和TClientSocket進行編程的問題,所以決定把我的一些編程經驗告訴給大家,讓大家能夠儘快的掌握他們的用法。
首先要講一下他們的一些設定(屬性):
TServerSocket 的幾個屬性
Active
是否是工作狀態,可以把它設定為ture或false來啟動和停止偵聽。
Port
本機偵聽的連接埠,可以設定為一大於1024的數;
ServerType
服務端的工作方式,有兩個選擇,一個是stNonBlocking 非阻塞方式,一個是stThreadBlocking線程阻塞方式,預設是非阻塞方式。用非阻塞方式編程比較簡單(我個人認為),用阻塞方式對每個串連必須自己用線程來控制收發。
ThreadCacheSize
緩衝的線程個數 當ServerType是stThreadBlocking時有效。
TClientSocket 的幾個屬性
Active
是否是工作狀態,可以把它設定為ture或false來同服務端建立或中斷連線。
Host
伺服器(ServerSocket)的電腦名稱,是一個字串
Address
伺服器(ServerSocket)的IP地址
ClientType
用戶端的工作方式一種是ctNonBlocking非阻塞方式,一種是ctBlocking阻塞方式,預設是非阻塞方式
Port
同服務端(ServerSocket)串連的連接埠,這個連接埠就是ServerSocket的偵聽 連接埠
在設定ClientSocket的(Host)主機名稱和設定(Address)IP地址是等效的,但設主機名稱需要網路具有DNS(網域名稱解析服務)伺服器,而且設主機名稱要比設主機的IP地址串連的速度慢一些。建議用Address來同ServerSocket進行串連。
設定好所有的屬性後,ServerSocket控制項就可以通過將它的Active屬性置為true來進行偵聽了。ClientSocket可以通過設定它的Active屬性來同ServerSocket進行串連。串連成功就可以進行通訊了。在這個過程中會產生一些事件,下面說說他們各自的事件。
TServerSocket的幾個事件
OnAccept
當一個客戶同服務端串連成功後產生這個事件,產生這個事件後這個串連就可用了,可以對這個客戶進行發送和接收資料。
OnClientConnect
當一個客戶正在同服務端建立串連的時候產生此事件,在這裡你可以決定是否接受這個串連。
OnClientDisconnect
當一個客戶同服務端的串連斷開的時候產生此事件,你需要在這裡進行一些處理,如從串連列表中清除次串連釋放記憶體等。
OnClientError
當客戶同服務端出現錯誤時產生此事件,在此事件中你可以通過設定ErrorCode = 0來屏蔽系統的錯誤提示。這樣就可以避免討厭的英文錯誤了。根據ErrorEvent的不同的值來得知發生了什麼錯誤,它有一下幾中錯誤類型
eeGeneral 未知錯誤
eeSend 發送資料出現錯誤
eeReceive 接收資料出現錯誤
eeConnect 客戶請求串連時出現錯誤
eeDisconnect 客戶中斷連線時出現錯誤
eeAccept 接受一個客戶時發生錯誤
一般來講,當發生錯誤的時候這個客戶的串連就已經不可用了,要對這個客戶進行串連失敗處理。
OnClientRead
當服務端收到用戶端發來的資料的時候產生此事件。接收用戶端的資料都在這裡進行。
OnClientWrite
當服務端發送資料的時候產生此事件。
TClientSocket的幾個事件
OnConnect
同服務端(ServerSocket)串連成功後將產生此事件,產生此事件後才說明這個串連可用了,這時才可以向ServerSocket發送資料。
OnConnecting
正在同服務端進行串連是產生此事件。
OnDisconnect
同服務端的串連斷開後產生此事件,產生此事件後ClientSocket的Active屬性就為false了,這時這個串連就不可用了,必須重新進行串連才能向伺服器發送資料。
OnError
當Socket發生錯誤時產生此事件,這個事件的意義和ServerSocket的Error事件完全一樣,只是它沒有eeAccept錯誤。
OnRead
當接收到服務端發來的資料後產生此事件。
OnWrite
當向服務端發送資料的時候產生此事件。
上面介紹了一下這兩個控制項的基本屬性和事件,在掌握一些方法就可以用這兩個控制項進行編寫通訊程式了,今天寫的有寫累了,改天在寫它的方法並具體使用這兩個控制項編寫一個通訊程式,有兩個選擇,一個是區域網路的聊天程式,一個是區域網路內的控製程序,大家喜歡那一個呢?給點建議吧.