delphi Winsock非阻塞模式详解

2016-11-12 11:12:01来源:oschina作者:依宸老爹人点击


Winsockt的TClientSocket设置ClientType的属性为ctNonBlocking.则通讯模式为非阻塞模式。 ctBlocking为阻塞模式,这里说一下阻塞与非阻塞的一些区别。 ctBlocking模式当客户端请求数据后,线程阻塞不继续执行,直到服务端返回数据,客户端将据需执行,并读取数据。 然而阻塞模式的缺陷还是比较大的,经常会使程序死掉或者假死。当服务端发送较大的文件时,阻塞模式基本废掉了,由于数据缓冲较小,不能及时的获取数据,阻塞模式将会认为数据发送完毕,会断掉服务连接,导致数据传送失败。因此阻塞模式比较适用于网络通畅,并且数据量小的情况。非阻塞模式当客户端发送连接请求,及open之后,并不会执行之后的请求,就算有请求的数据也不会发送,而是会执行connect和write这两个事件,中间应该还有connecting事件。connect是连接成功后的事件,write是准备发送请求的事件。我们所有的发送请求都会在write事件里面执行。当我们在write事件中执行后,会调用read事件,在read事件中我们将会接受到服务端发送的数据,如果数据量比较大,则会一直调用read事件,直到数据发送完毕。非阻塞模式适合数据量较大的情况。
转载地址:/2014th7cj/d/file/p/20161112/4xz1u1p0ase.html

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台