分享

TServerSocket 与 TClientSocket 使用说明

 quasiceo 2014-09-30

TServerSocket 与 TClientSocket 使用说明

2010-07-15 00:28 阅读(265)评论(0)

转自:http://redsoft./post.1068621.html

TServerSocket


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

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

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

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

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

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

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

 事件触发的次序 (Noblocking 方式)
OnListen
OnClientConnect
OnAccept
OnClientWrite
....
OnClientRead
OnClientDisconnect


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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多