在网络通讯中,由于网络拥挤或一次发送的数据量过大等原因,经常会发生交换的数据在短时间内不能传送完,收发数据的函数因此不能返回,这种现象叫做阻塞。Winsock对有可能阻塞的函数提供了两种处理方式:阻塞和非阻塞方式。在阻塞方式下,收发数据的函数在被调用后一直要到传送完毕或者出错才能返回。在阻塞期间,被阻的函数不会断调用系统函数GetMessage()来保持消息循环的正常进行。对于非阻塞方式,函数被调用后立即返回,当传送完成后由Winsock给程序发一个事先约定好的消息。
在编程时,应尽量使用非阻塞方式。因为在阻塞方式下,用户可能会长时间的等待过程中试图关闭程序,因为消息循环还在起作用,所以程序的窗口可能被关闭,这样当函数从Winsock的动态连接库中返回时,主程序已经从内存中删除,这显然是极其危险的。
在编程时,应尽量使用非阻塞方式。因为在阻塞方式下,用户可能会长时间的等待过程中试图关闭程序,因为消息循环还在起作用,所以程序的窗口可能被关闭,这样当函数从Winsock的动态连接库中返回时,主程序已经从内存中删除,这显然是极其危险的。
解决方案 »
- 访问一个表,我需要中间层是JAVA(J2EE)的架构,客户端(表现层)是 DELPHI,愿意付人民币 5000元,一手交钱,一手交货,多谢大侠帮忙,
- 建立了一个“IT圈程序员群”:),欢迎大家踊跃加入,技术、情感无所不谈:)
- 从Access数据库中读出数据然后插到Microsoft Visual FoxPro 6.0中去的问题!
- 怎样从CMOS中读取本机的日期。
- 如何在delphi中调用outlook
- 请教SQL查询的问题
- 惨呀:我的FastReport 2.47不能自定义纸张大小(只有从下拉式选择标准大小)
- 在QuickRep中, 如何让一个QRDBText自动换行阿?
- 看看这个PB中能够实现的功能,如何在Delphi中实现
- 如何制作一个竖排的编辑框,而且光标横着闪,不能竖着闪。急!!!
- 我用了adostoredproc控件,来运行一个储存过程,他返回的记录集我要怎么显示在dbgrid中阿
- 在delphi里可变长字段是什么类型的?
非阻塞方式连接每一个客户,每个连接都在一个单独的线程中处理。并用OnClientRead()和OnClientWrite()通知服务器端的Socker进行读写。
阻塞方式连接客户,即以主动查询的方式可客户连接。