程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 如何編寫用TCP/IP的通訊程序

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

編輯:關於C++

最近在網上不斷的看到有人問如何用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

當向服務端發送數據的時候產生此事件。

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved