游戲策劃咨訊
          做一個游戲并不難,難的是做一個好游戲;完美在于積累!

          如何編寫用TCP/IP的通訊程序

             最近在網(wǎng)上不斷的看到有人問如何用BCB的TServerSocket和TClientSocket進行編程的問題,所以決定把我的一些編程經(jīng)驗告訴給大家,讓大家能夠盡快的掌握他們的用法。

          首先要講一下他們的一些設(shè)置(屬性):
          TServerSocket 的幾個屬性
          Active       
              是否是工作狀態(tài),可以把它設(shè)置為ture或false來啟動和停止偵聽。
          Port
              本機偵聽的端口,可以設(shè)置為一大于1024的數(shù);
          ServerType   
              服務(wù)端的工作方式,有兩個選擇,一個是stNonBlocking 非阻塞方式,一個是stThreadBlocking線程阻塞方式,默認是非阻塞方式。用非阻塞方式編程比較簡單(我個人認為),用阻塞方式對每個連接必須自己用線程來控制收發(fā)。
          ThreadCacheSize  
              緩沖的線程個數(shù) 當(dāng)ServerType是stThreadBlocking時有效。
          TClientSocket 的幾個屬性
          Active      
              是否是工作狀態(tài),可以把它設(shè)置為ture或false來同服務(wù)端建立或斷開連接。
          Host    
              服務(wù)器(ServerSocket)的計算機名,是一個字符串
          Address
          服務(wù)器(ServerSocket)的IP地址
          ClientType
             客戶端的工作方式一種是ctNonBlocking非阻塞方式,一種是ctBlocking阻塞方式,默認是非阻塞方式
          Port
          同服務(wù)端(ServerSocket)連接的端口,這個端口就是ServerSocket的偵聽              端口
          在設(shè)置ClientSocket的(Host)主機名和設(shè)置(Address)IP地址是等效的,但設(shè)主機名需要網(wǎng)絡(luò)具有DNS(域名解析服務(wù))服務(wù)器,而且設(shè)主機名要比設(shè)主機的IP地址連接的速度慢一些。建議用Address來同ServerSocket進行連接。

          設(shè)置好所有的屬性后,ServerSocket控件就可以通過將它的Active屬性置為true來進行偵聽了。ClientSocket可以通過設(shè)置它的Active屬性來同ServerSocket進行連接。連接成功就可以進行通訊了。在這個過程中會產(chǎn)生一些事件,下面說說他們各自的事件。

          TServerSocket的幾個事件
          OnAccept
              當(dāng)一個客戶同服務(wù)端連接成功后產(chǎn)生這個事件,產(chǎn)生這個事件后這個連接就可用了,可以對這個客戶進行發(fā)送和接收數(shù)據(jù)。
          OnClientConnect  
          當(dāng)一個客戶正在同服務(wù)端建立連接的時候產(chǎn)生此事件,在這里你可以決定是否接受這個連接。
          OnClientDisconnect
          當(dāng)一個客戶同服務(wù)端的連接斷開的時候產(chǎn)生此事件,你需要在這里進行一些處理,如從連接列表中清除次連接釋放內(nèi)存等。
          OnClientError
          當(dāng)客戶同服務(wù)端出現(xiàn)錯誤時產(chǎn)生此事件,在此事件中你可以通過設(shè)置ErrorCode = 0來屏蔽系統(tǒng)的錯誤提示。這樣就可以避免討厭的英文錯誤了。根據(jù)ErrorEvent的不同的值來得知發(fā)生了什么錯誤,它有一下幾中錯誤類型
          eeGeneral   未知錯誤
          eeSend    發(fā)送數(shù)據(jù)出現(xiàn)錯誤
          eeReceive   接收數(shù)據(jù)出現(xiàn)錯誤
          eeConnect   客戶請求連接時出現(xiàn)錯誤
          eeDisconnect 客戶斷開連接時出現(xiàn)錯誤
          eeAccept     接受一個客戶時發(fā)生錯誤
              一般來講,當(dāng)發(fā)生錯誤的時候這個客戶的連接就已經(jīng)不可用了,要對這個客戶進行連接失敗處理。
          OnClientRead
          當(dāng)服務(wù)端收到客戶端發(fā)來的數(shù)據(jù)的時候產(chǎn)生此事件。接收客戶端的數(shù)據(jù)都在這里進行。
          OnClientWrite
          當(dāng)服務(wù)端發(fā)送數(shù)據(jù)的時候產(chǎn)生此事件。

          TClientSocket的幾個事件

          OnConnect
          同服務(wù)端(ServerSocket)連接成功后將產(chǎn)生此事件,產(chǎn)生此事件后才說明這個連接可用了,這時才可以向ServerSocket發(fā)送數(shù)據(jù)。
          OnConnecting
          正在同服務(wù)端進行連接是產(chǎn)生此事件。
          OnDisconnect
          同服務(wù)端的連接斷開后產(chǎn)生此事件,產(chǎn)生此事件后ClientSocket的Active屬性就為false了,這時這個連接就不可用了,必須重新進行連接才能向服務(wù)器發(fā)送數(shù)據(jù)。
          onError
          當(dāng)Socket發(fā)生錯誤時產(chǎn)生此事件,這個事件的意義和ServerSocket的Error事件完全一樣,只是它沒有eeAccept錯誤。
          OnRead
          當(dāng)接收到服務(wù)端發(fā)來的數(shù)據(jù)后產(chǎn)生此事件。
          OnWrite
          當(dāng)向服務(wù)端發(fā)送數(shù)據(jù)的時候產(chǎn)生此事件。

          上面介紹了一下這兩個控件的基本屬性和事件,在掌握一些方法就可以用這兩個控件進行編寫通訊程序了,今天寫的有寫累了,改天在寫它的方法并具體使用這兩個控件編寫一個通訊程序,有兩個選擇,一個是局域網(wǎng)的聊天程序,一個是局域網(wǎng)內(nèi)的控制程序,大家喜歡那一個呢?給點建議吧.

          posted on 2005-07-24 00:19 藍色雪焰 閱讀(554) 評論(0)  編輯  收藏 所屬分類: 編程技術(shù)
           
          主站蜘蛛池模板: 河北区| 莎车县| 石棉县| 峨山| 边坝县| 醴陵市| 陆丰市| 青岛市| 腾冲县| 龙井市| 美姑县| 若尔盖县| 太和县| 鄯善县| 靖安县| 德州市| 中卫市| 贵定县| 芒康县| 高雄县| 根河市| 凤台县| 成安县| 靖宇县| 河东区| 色达县| 民勤县| 聂荣县| 安阳市| 容城县| 宣威市| 栾川县| 武邑县| 尼勒克县| 文山县| 左云县| 金山区| 泽库县| 宣城市| 丁青县| 白水县|