编程是一门艺术

raptor.zh(at)gmail.com Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

archives 存档

01 Jan - 31 Dec 2018
01 Jan - 31 Dec 2017
01 Jan - 31 Dec 2016
01 Jan - 31 Dec 2015
01 Jan - 31 Dec 2014
01 Jan - 31 Dec 2013
01 Jan - 31 Dec 2012
01 Jan - 31 Dec 2011
01 Jan - 31 Dec 2010
01 Jan - 31 Dec 2009
01 Jan - 31 Dec 2008
01 Jan - 31 Dec 2007
01 Jan - 31 Dec 2006
01 Jan - 31 Dec 2005
01 Jan - 31 Dec 2004
01 Jan - 31 Dec 2003
01 Jan - 31 Dec 2002
01 Jan - 31 Dec 2001
01 Jan - 31 Dec 2000
01 Jan - 31 Dec 1999

--

links 链接

--

MSocket 控件

从我在本站预告将发表此控件至今已过去数月,耽搁这么长时间,实在不好意思。 主要是因为琐事缠身,况且从五一节后,我一直在研究 Kylix/Delphi6 ,特别是被 Delphi 6 的新 Feature 所吸引, 花了很多的时间,以至于这个控件的编写工作不断被延后。

我之所以要写这个控件,实在是因为 Borland 所提供的 TServerSocket/TClientSocket 太难用了。 其实在用 NonBlocking 时,这组控件还是相当好的,但在用于多线程阻塞方式通信时就太难用了。 所以我才写了这么一组类和一个 UDP 控件,用于多线程阻塞方式通信。这组类不能说功能很强大,但是应该说还是很好用的, 因为我是专门针对多线程阻塞方式通信应用的需要而写的。我已经把她用在一个程序里,用其中的 TCP 在 LAN 中传过十M级的文件, 没有发现什么问题。

其实这个控件来迟还有另一个原因,我在 Kylix 中看到 Borland 提供了另一组控件提供了 UDP/TCP 通信 : TUDPSocket/TTCPServer/TTCPClient ,这是一组 CLX 控件,我本想把其中的 for Linux 部分去掉后用于 Delphi 5 ,花了不少时间, 但结果却不行, I faint。


关于 1.5 版的说明:

在这里我要向大家表示“忏悔”,因为编程大师 Bjarne.Stroustrup (C++语言的发明者)说:“永远不要重新发明轮子。”,然而这一次我却干了一件“重新发明轮子”的蠢事。 TServerSocket/TClientSocket 并不是我原来想的那么难用,它其实还是挺好用的,只是用法有些不同,我不会用而已。但我却为此自己写了一组 Socket 类/控件。

为了用行动表示我的悔意,我写了一个类来封装了阻塞方式工作的 TWinSocketStream (在 MBSocket 单元),并用它实现了一个简单的新邮件检查功能。详见:《邮件检查程序》,另在 MSocket 的 DEMO 中包含了一个用于线程阻塞方式工作的 TServerSocket 的 Demo ,其中包括一个从 TServerClientThread 派生的服务端线程类的实现。

我要非常感谢几位朋友向我指出了本控件在使用中出现的问题,但由于前一段的种种原因,我一直没空改正,实在是深表歉意。    


更新记录:


1.6 版(Jul.07-02)的变化(Only MBSocket): 

1.增加了流传输的灵活性,可以指定传输数据的长度,并且当指定数据长度时不再用默认协议,便于自定义协议。


1.5 版(Mar.9-02)的变化: 

1.修正了几位朋友指出的BUG,都是因为控件中对阻塞/非阻塞的状态设置不对造成的,起初我是用增加一个 WaitForSend 来解决,但是效率很低,在研究了 TServerSocket/TClientSocket 的源程序后才找到解决办法,是因为在调用 WSAAsyncSelect 后会自动设置为非阻塞方式,所以在 Accept 一个连接后需要重新设置为阻塞方式;

2.增加了 SendText/RecvText 一对方法。


1.2 版(Nov.4-01)的变化:

1.修正了用于 C++ Builder 5 会出错的问题(因为 BCB5 的一个 BUG ,详见 MSocket.pas 单元接口中 TMUDPSocket 类的注释); 通过将 SendMessage 方法改名为 SendString 来解决,同时相应地把 RecvMessage 也改名为 RecvString 。

2.修正了 TMUDPSocket 类的 RecvString 方法有时会出现 10060 的超时错的问题;通过在 recvfrom 之前加入 WaitForData 等待。

3.取消了 TMUDPSocket 的收发信息长度的限制。

4.将 WaitForData 放到 TMCustomSocket 中,使 TMUDPSocket 也支持此方法。

5. TMTCPServer/TMTCPClient 增加 SendBuf/RecvBuf, SendString/RecvString 两对方法。


在此下载此控件(包括 MSocket 和 MBSocket 源程序和 D5/D6/BCB5/BCB6 版的四个 Demo):66KB

Aug.2-01, Nov.4, Mar.20, Apr.13, May.23, Jul.07-02

Trackback link:

Please enable javascript to generate a trackback url

No trackbacks

评论(0)


 
   
 
  表情图标 

 


提示: 除了 <b> 和 <i> 之外,其他的Html标签都将从您的评论中去除.url或mail地址会被自动加上链接.