delphi Winsock非阻塞模式详解

这几天一直研究delphi winsock。记录一下心得。


Winsockt的TClientSocket设置ClientType的属性为ctNonBlocking.则通讯模式为非阻塞模式。

ctBlocking为阻塞模式,这里说一下阻塞与非阻塞的一些区别。

ctBlocking模式当客户端请求数据后,线程阻塞不继续执行,直到服务端返回数据,客户端将据需执行,并读取数据。

然而阻塞模式的缺陷还是比较大的,经常会使程序死掉或者假死。当服务端发送较大的文件时,阻塞模式基本废掉了,由于数据缓冲较小,不能及时的获取数据,阻塞模式将会认为数据发送完毕,会断掉服务连接,导致数据传送失败。因此阻塞模式比较适用于网络通畅,并且数据量小的情况。


非阻塞模式当客户端发送连接请求,及open之后,并不会执行之后的请求,就算有请求的数据也不会发送,而是会执行connect和write这两个事件,中间应该还有connecting事件。connect是连接成功后的事件,write是准备发送请求的事件。我们所有的发送请求都会在write事件里面执行。当我们在write事件中执行后,会调用read事件,在read事件中我们将会接受到服务端发送的数据,如果数据量比较大,则会一直调用read事件,直到数据发送完毕。非阻塞模式适合数据量较大的情况。


阻塞模式与非阻塞模式区别还是较大,但是根据我个人观点,非阻塞模式相对与阻塞模式有更大的优势,无论是性能,还是数据完整性方面的都较好。因此在我开发时也是使用非阻塞的模式。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值