快速业务通道

如何编写用TCP/IP的通讯程序

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

最近在网上不断的看到有人问如何用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

当向服务端发送数据的时候产生此事件。

上面介绍了一下这两个控件的基本属性和事件,在掌握一些方法就可以用这两个控件进行编写通讯程序了,今天写的有写累了,改天在写它的方法并具体使用这两个控件编写一个通讯程序,有两个选择,一个是局域网的聊天程序,一个是局域网内的控制程序,大家喜欢那一个呢?给点建议吧.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号