设为首页 加入收藏

TOP

Delphi的Socket编程步骤(九)
2017-10-10 12:04:57 】 浏览:9073
Tags:Delphi Socket 编程 步骤
bsp;   
      读和写操作事件   
       Non-blocking   sockets想通过连接读或写时,它会产生一个读和写操作事件通知你的socket.在客户端sockets,你可以在OnRead或OnWrite事件句柄中对这些事件做出反应.在服务器端Scokets,可以在OnClientRead或OnClientWrite事件句柄中对这些事件做出反应.与socket连接相关联的windows       socket       object在事件句柄的读或写中被当作一个参数.Windows   socket  object提供一个方法号(number   of   methods)以允许你通过连接读或写.   

      通过socket连接读,使用ReceiveBuf或ReceiveText方法.在使用ReceiveBuf方法前,使用Receivelength方法去确定在连接的另一端socket准备发送的字节数(number       of       bytes).   
      通过socket连接写,使用SendBuf,SendStream,或SendText方法.如果你通过socket发送信息后不在需要socket连接,你可以使用SendStreamThenDrop方法.   SendStreamThenDrop在写完所有的信息后将关闭Socket连接,它能够从stream读信息.如果你使用SendStream或SendStreamThenDrop方法,不要释放Stream   object,   socket在连接结束后会自动释放这个Stream.   
      注意:SendStreamThenDrop将关闭一个独立的客户连接服务,而不是监听连接.   
    
    B.Blocking       connections   
    当你使用的连接是Blocking时,你的Socket必须通过连接发起读或写操作,胜过被动的等待从socket连接发来的通知.       当你的连接末端的读和写操作发生改变时
    使用Blocking    socket.对于客户端sockets,设置ClientType属性为ctBlocking 以便构成一个blocing       connection.根据你的客户端应用想完成什么,你可能想建立一个执行线程去完成读或写操作,以便你的应用能够继续执行其他的线程,当它在等待通过连接读或写操作的完成.   
    对于服务器sockets,设置ServerType属性为stThreadBlocking 以便构成一个blocking connection.因为blocking      connections在等待通过连接读或写信息完成时挂起了其他代码的执行,服务器socket控件通常产生一个新的执行线程给每一个客户连接,当ServerType设置为stThreadBlocking时.许多使用Blocking连接的应用都写使用线程(using       threads.甚至如果你不使用线程,你可能也想使用 TWinSocketStream 去读和写.   
    1)using       threads   
    当使用一个blocking       connection进行读或写操作时,客户sockets不会自动产生一个新线程.如果你的客户应用程序没有什么事做,直到读或写信息完成,那么这正是你想要的.如果你的应用包括了一个用户界面,它还需要响应用户的操作,那么,你可能想产生一个独立的线程去读写.当服务器sockets形成一个blocking连接时,他们常常产生独立的线程给每一个客户连接,所以没有客户需要等待直到其他客户完成通过连接读或写操作.在默认情况下,服务器sockets使用TServerClientThread对象去实现为每个连接执行不同的线程.   
    TServerClientThread对象模拟发生在non-blocking连接中的OnClientRead和OnClientWrite事件.可是,这些事件发生在监听socket上时,不是本地线程(thread-local).如果客户请求频繁,你将想建立你自己的TServerClientThread子类去提供一个安全线程(Thread-Safe)去完成读和写操作.   
    当写客户线程或写服务器线程时,你能够使用TwinSocketStream去做实际的读写操作.   
      A)写客户端线程   
&n

首页 上一页 6 7 8 9 下一页 尾页 9/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Spine】Spine Runtime for Delp.. 下一篇DELPHI 小结

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目