BCB的TCP/IP控件

用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
当向服务端发送数据的时候产生此事件。
时间: 2024-08-30 07:00:29

BCB的TCP/IP控件的相关文章

CIPAddressCtrl IP控件

 CIPAddressCtrl 属性  CIPAddressCtrl 成员函数  成员函数代码测试   一.CIPAddressCtrl Class Members IsBlank Determines if all fields in the IP Address Control are empty. ClearAddress Clears the contents of the IP Address Control. GetAddress Retrieves the address valu

MFC的IP控件的使用,获取本地IP显示到控件

当写局域网编程时候,往往需要用到IP控件. 请原谅我还在用VC6.0 拖到对话框就能用了! ....................分割线...................... 获取本地IP显示IP控件 (1)获取本地计算机名 int GetLocalHostName(CString &sHostName) //获得本地计算机名称 { char szHostName[256]; int nRetCode; nRetCode=gethostname(szHostName,sizeof(szH

BCB::TClientSocket,TServerSocket控件

一,首先服务端开启监听 ServerSocket1->Port=StrToInt(5000); ServerSocket1->Active=true; ServerSocket1控件,响应ServerSocket1Listen事件: 二,创建连接 ClientSocket1->Address="127.0.0.1"; ClientSocket1->Port=StrToInt(5000); ClientSocket1->Active=true; Client

IP Editor IP控件

HWND hIpEdit; void __fastcall TForm2::FormCreate(TObject *Sender) { hIpEdit = CreateWindow(WC_IPADDRESS, NULL, WS_CHILD | WS_VISIBLE, 10, 10, 135, 47, Handle, 0, HInstance, NULL); } // -----------------------------------------------------------------

CIPAddressCtrl控件

CIPAddressCtrl m_ipCtrl; 1.获取控件IP值 int GetAddress(byte& byteFirst, byte& byteTwo, byte& byteThree, byte& byteFour); int GetAddress(DWORD& dwAddress); byte byteIP[4]; (1).m_ipCtrl.GetAddress(byteIP[0], byteIP[1], byteIP[2], byteIP[3]);

第二十一篇:SOUI中的控件注册机制

Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符串中创建出需要的控件对象,和Win32类似,在SOUI中要创建一个新的控件也同样需要向SOUI系统注册新的控件类. 从demo.cpp的main中我们可以看到类似如下的控件注册控件的代码: //向SApplication系统中注册由外部扩展的控件及SkinObj类 SWkeLoader wkeLoa

支持嵌入式的TCP/IP协议可加载到用户的应用程序的条码控件TConnector

TConnector ActiveX条码控件可加载到用户的应用程序或MS-IE.VB.VC++.Excel.Access.WinWord.Delphi等应用程序中,用户可以在几分钟内连接任意设备(如一个条形码阅读器的加载时间). 产品特征: 支持嵌入式的TCP/IP协议,简化企业级网络应用. 标准的应用程序接口只需调用5个函数就可支持串行接口(读/写),并行接口(写),企业网(TCP/IP)读/写,空设备和文件IO读/写. TConnector主要是为了数据采集而开发的,但是由于其设计的灵活性,

Android UI组件之自定义控件实现IP地址控件

趁着时间挺充裕,就多写几篇博客.每一篇都是学习中的教训.今天在做东西的时候突然想到之前在MFC的时候都会有一个IP地址控件,可能是PC端用的比较多,但是在移动端好像基本没什么用处,但是偶尔也会有项目要用到,毕竟还是有些项目不需要接入互联网,只需要接入企业的内部网络.这个时候为了程序的通用性,我想到的第一个就是在程序中去配置一个网络环境,并将它保存到本地中,这样以后程序每次加载直接去本地中获取值.既然没有已有的控件,那么久自定义好了.存储在本地首先想到的就是sqlite和SharedPrefere

MFC Unicode编码下,获取CString描述的IP地址并赋值到CIPAddressCtrl控件中

1. UniCode编码下,CString中字符被声明为宽字,应使用如下方法获取char* CString cstrIp = strIp; // Unicode 下将 CString转为char* int n = cstrIp.GetLength(); int len = WideCharToMultiByte(CP_ACP,0,cstrIp,cstrIp.GetLength(),NULL,0,NULL,NULL); char *p = new char[len+1]; WideCharToMu