【摘要】:TCP/IP网络环境下的应用程序是通过Windows Sockets实现的。stThreadBlocking表示以阻塞方式连接客户,即以主动查询的方式与客户连接。OnClientRead事件:通知服务器去读取有关信息。Address属性:AnsiString类型,服务器的IP地址,如202.98.35.14。Socket能够接收到的异步事件都是以Windows消息的形式发送给此句柄的。
TCP/IP网络环境下的应用程序是通过Windows Sockets实现的。Socket(套接字)是网络通信的基本构件,一个Socket对应于通信的一端,连接建立、数据传输、连接终止等操作都是通过Socket实现的。常用的Socket类型有两种:数据流Socket和数据报Socket。前者对应于TCP服务,提供可靠的传输;后者对应于UDP服务,提供不可靠的传输。
由于直接使用Socket编程比较复杂,所以在实际编程的时候,没有直接使用Socket,而是使用了BCB中的两个组件TServerSocket和TClientSocket。
1.TServerSocket和TClientSocket组件介绍
在BCB中,TServerSocket类和TClientSocket类涵盖了基本的Windows Sockets编程,其中TServerSocket作为服务器端使用,TClientSocket作为客户端使用。这两个类本身并不提供Socket连接,但是它们都有一个Socket属性,这个属性才提供Socket连接。下面先介绍这两个类常用的方法属性。
(1)服务器类TServerSocket
Socket属性:TServerWinSocket类型。最重要的属性,提供Socket连接。事实上发送、接收数据都要靠这个属性,下面将有详细的介绍。
Port属性:int类型,要监听的端口。如果在Service属性中指定了服务类型,此属性将被忽略。
Service属性:AnsiString类型,提供的服务类型,如HTTP、FTP等。如果在这里指定了服务类型,Port属性将被忽略,因为各种服务都有特定的端口,如FTP为21,HTTP为80。
ServerType属性:TServerType类型。设置与客户连接的方式,取值为两个枚举常量st-NonBlocking和stThreadBlocking。stNonBlocking表示用非阻塞方式连接每一个客户,每个连接都在一个单独的线程中处理,并用OnClientRead()和OnClientWrite()通知服务器端的Socket进行读写。stThreadBlocking表示以阻塞方式连接客户,即以主动查询的方式与客户连接。
Active属性:bool类型,激活服务,相当于调用Open()方法。
OnAccept事件:当有客户请求连接时触发。
OnClientRead事件:通知服务器去读取有关信息。OnClientWrite与此类似。
(2)客户类TClientSocket
Socket属性:TClientWinSocket类型,功能同TServerSocket的Socket属性。
Active属性:bool类型,功能同TServerSocket的Active属性。
Address属性:AnsiString类型,服务器的IP地址,如202.98.35.14。
ClientType属性:TClientType类型,与服务器连接方式,取值为两个枚举常量ctNon-Blocking和ctBlocking。ctNonBlocking表示非阻塞方式,ctBlocking表示阻塞方式。
Host属性:AnsiString类型,要连接的主机名,如www.cpcw.com。
Port属性。int类型,功能同TServerSocket的Port属性。
Service属性:AnsiString类型,功能同TServerSocket的Service属性。
OnConnect事件:当与服务器连接上时发生,OnConnecting、OnDisConnect功能与此类似。
OnRead事件:通知客户机去读取有关信息。OnWrite功能与此类似。
2.Socket属性介绍(www.chuimin.cn)
TServerSocket和TClientSocket只提供基本的服务器/客户机的连接,真正提供数据传输的是它们都有的属性Socket,它的类型分别是TServerWinSocket和TClientWinSocket。而TServerWinSocket和TClientWinSocket的父类都是TCustomWinSocket,下面我们就来看看TServerWinSocket和TClientWinSocket常用的属性和方法。
(1)共同的属性方法(来源于TCustomWinSocket)
Connected属性:bool类型,检查连接是否成功。
LocalAddress属性:AnsiString类型,本地IP地址。与此类似,LocalHost属性为本机域名,LocalPort属性为本机端口。
RemoteAddress属性:AnsiString类型,另一端的IP地址。与此类似,RemoteHost属性为另一端域名,RemotePort属性为另一端端口。
SocketHandle属性:int类型,只读,返回Socket对象的Windows句柄。如果要调用WinSocket API函数,将用到此句柄。
Handle属性:HWND类型。Socket能够接收到的异步事件都是以Windows消息的形式发送给此句柄的。
Close()方法:作为服务器,关闭所有连接;作为客户机,关闭自己与服务器的连接。
SendText(AnsiString)方法:发送一个字符串。
SendBuf(void*buff,intcount):发送存放在缓冲区buff中的count个字节,返回实际发送的字节数。
SendStream(TStream*AStream):发送一个流到Socket中。
ReceiveText():从Socket中读取并返回一个字符串。
ReceiveLength():从Socket中读取数据需多少字节的缓冲区。
ReceiveBuf(void*buff,intcount):从Socket中读取count字节的数据到buff。
(2)TClientWinSocket类的属性
TclientWinSocket类只增加了一个ClientType属性,用于决定与服务器的连接类型(参见TClientSocket->ClientType)。
(3)TServerWinSocket类的属性
ServerType属性:指明服务类型,参见TServerSocket->ServerType。
ActiveConnection属性:int型,只读,返回当前活动的连接数。
Connection属性:TCustomWinSocket类型数组,索引n表示第n+1个连接,如Connec-tion[0]表示第一个连接。
有了这些知识,就可以完成一些基本的Windows Sockets编程了。下面结合PMM2000系列电力网络仪表TCP/IP上位机测试软件来了解具体的应用。
相关推荐