2011-05-27 111 views
4

我刚刚开始熟悉Eclipse,Emacs,Visual Studio和记事本生活后的Embarcadero RAD Studio 2010:为什么不建议使用TClientSocket和TServerSocket,而应该使用什么?

我跳进了一个相当大的C++应用程序(500.000 - 1.000.000线),我发现大量使用TClientSocket和TServerSocket。 IDE首先强调TClientSocket没有找到,但仍然可以编译,我抓住了我的头。然后我发现它不再是默认安装的,并且自回来以后被标记为已弃用。

我试过了解这个主题,但没有找到太多的信息。我的问题是

  • 为什么不建议使用TClientSocket和TServerSocket?
  • 它们与WinSock和BSD套接字的功能有什么不同?
  • 什么是最好使用,而不是有一个快速替换,不会涉及通过整个应用程序和改变无处不在TClientSocket和TServerSocket正在使用?我猜想这主要是内部工作变化或?

回答

3

已弃用,因为不再支持。它们是Winsock套接字的包装,所以整体内部机制是相同的 - '创建监听器,监听,接受,创建客户端处理程序线程,将其传递给ServerClientSocket,客户端线程读取和写入数据流'。

你也许可以尝试导入组件 - 如果你有一个庞大的遗留应用程序支持,那么这肯定是如果它的工作方式。

然后还有其他的方式:((使用印或突触组件来构建“Tclientsocket构件实现”和TServerSocket”类具有相同的成员,使传统的应用程序将没有巨大变化工作

+0

是的,我已经安装了并导入组件,以便应用程序编译并运行良好。但根据弃用的原因,可能并且想法使用indy或synapse创建包装类 – inquam 2011-05-27 08:31:47

0

他们赞成被否决。 Indy套接字

但是,Indy套接字是仅阻塞的,如果你的程序使用了阻塞套接字,那么这很好,但是如果你使用的是非阻塞套接字,那么据我所知你只有两个选项:

  • 使用线程加阻断印插座
  • 使用Tclientsocket构件实现和TServerSocket

有部件TTcpServerTTcpClient具有阻塞和非阻塞之间进行切换。但是,如果以非阻塞模式操作它们,则它们不起作用(基本操作会因WSAEWOULDBLOCK而失败),并且没有解决方法。

请注意,读者可能没有意识到:即使在最新版本中(我写的),仍然可以通过将dclsocketsNNN.bpl添加到设计时软件包列表中,将它们导入到IDE中。他们在那里,只是默认情况下不活跃。

个人而言,我仍然在生产中使用Tclientsocket构件实现非阻塞模式,只是正常工作(修复了一些bug,这可能是由于到完整的源代码提供事后!)

+0

您是否有这些“修复”可用?可能解决我们有时看到的一些旧奇怪的错误:) – inquam 2014-06-11 10:01:55

相关问题