TServerSocket 与 TClientSocket 使用说明

    技术2026-10-04  2

    TServerSocket

    属性  Active 表示服务器是否已触活。服务器激活后会打开端口,对端口进行监听。  Port   为服务器触活后监听的端口号  Socket 有所有端口操作功能 (如:得到所有对应的客户端连接等等)

    事件OnListen  服务器激活,监听端口时触发

    OnClientConnect  客户端试图连接服务器时触发

    OnAccept 事件  当客户端连接上来。这里触发这个事件。如果服务器不想该客户连接,可以用 参数里的 socket.close 把连接关闭

    OnClientDisconnect  客户端断开时触发 OnClientError  客户端发生错误时触发 如: 客户端异常断开会触发 10053 错误

    OnClientRead  当收到客户端发来的数据时会触发这个事件。但如果服务器没处理,那该事件不会再触发了。

    OnClientWrite  以为在服务器向客户端写数据时会触发,但事实上好象没有发生。只在客户端连接好后激发了,在 OnAccecpt 事件之后。

     事件触发的次序 (Noblocking 方式)OnListenOnClientConnectOnAcceptOnClientWrite....OnClientReadOnClientDisconnect

    TClientSocket

    属性Active  是否激活Host    服务器地址,可以是IP也可以是机器名或域名。Port    服务器的端口Socket  socket 对象发送数据  TClientSocket.Socket.SendText();或 TClientSocket.Socket.SendBuf();一般ASCII 用 SendText二进制用 SendBuf

    接收数据   TClientSocket.Socket.ReceiveLength 数据长度  TClientSocket.Socket.ReceiveBuf(var Buf; Count: Integer): Integer; // 一般用于二进制  TClientSocket.ReceiveText: string;  // 一般用于 ASCII

     

    工作模式 (个人看法)  TServerSocket 有两种工作模式 stNonBlocking (非阻塞模式) 与 stThreadBlocking (线程阻塞模式)

      非阻塞模式 stNonBlocking  是默认的工作模式。是用单线程事件方式进行工作的。每个连接有数据到时才触发相应的消息,通知服务器对客户端进行处理  如 OnClientRead

      线程阻塞械式  是用多程序阻塞方式进行工作的。每个连接对应于一个线程。对相应的SocketThread进行操作,就可以操作相应的连接。  但对 TServerSocket 而言,触发的事件就不同了.  如:有客户端连接 就不会触发 OnClinetConnect 事件了。而是 GetThread 与 ThreadStart 事件。

        TClientSocket 也有两种工作模式 ctNonBlocking (非阻塞模式) 与 ctBlocking (阻塞模式)

    //转载这篇文章,目的是这段内容,其它的我都懒得看,呵呵。。。(^_^)

      非阻塞模式  是以消息的方式进行工作的,主要的体现在 OnRead 事件上,如连接上服务器之后,服务器有数据发过来。客户端会触发OnRead事件,表示有从网络上收到数据。

      阻塞模式  阻塞通讯过程的方式。如服务器有数据发过来。客户端不会触发OnRead事件,如果客户端永远不自己去读,那客户端也就永远不会知道有数据到了。

      相比而言,要根据实现情况选择工作方式。如果如聊天室之类的程序。客户端需要知道什么时候有数据到,而且数据的到达是不可预知的。那就要用非阻塞模式。如果是一般的“一问一答式”的通讯过程,如:发送邮件,FTP之类的。那用阻塞方式也许更好。 

    错误说明:可能发生的错误的错误码  10048: 打开一个已经打开的端口时会出现这个错误!         解决方法:另外打开一个端口,或先关闭相关程序或服务。

      客户端  10061: 可以ping通服务器的IP地址,但不能与服务器指定端口建立连接。         可能的原因有:1. 服务器相关软件或服务没有启动。              2. 服务器端的防火墙可能把连接过滤掉了。

      10065: 连接一个不存在的IP地址时会发生这个错误!          可能的原因:1, 对方没有开机             2, 网络故障      3, IP 地址本身有问题。 

      服务器端  10053: 这个错误有点特殊,一般是服务器端发生。         只在一个情况下会发生:连接链接后,服务器向客户端发送了数据,但客户端没有去读取,客户端再关闭连接时。这时服务器端会出现这个错误!

    最新回复(0)