【问题标题】:Suggestions on writing a TCP IP messaging system (Client/Server) using Delphi 2010使用 Delphi 2010 编写 TCP IP 消息系统(客户端/服务器)的建议
【发布时间】:2011-05-30 02:52:10
【问题描述】:

我想在 Delphi 2010 中使用 TCP IP 编写一个消息传递系统。我想听听我最好的选择是使用标准的 delphi 2010 组件/indy 组件来执行此操作。

我想写一个服务器来监听和转发消息到网络上运行客户端的所有机器。

1.) a.) 客户端可以向服务器发送消息以转发给所有其他客户端 b.) 客户端监听来自其他发送者的消息(通过服务器)并显示消息。

2.) a.) 服务器可以向所有客户端发送消息 b.) 服务器将来自客户端的任何消息转发给所有其他客户端

感谢任何建议

注意:我不是在编写即时消息或聊天程序。这只是一个用户可以向其他用户发送警报/消息的系统——他们不能互相回复!没有商业、共享软件等链接 - 请!我想听听您将如何编写这种类型的系统以及您将采用哪些方法,以及您可能会使用的 TCP IP 消息传递架构。不管是直接的Winows API,Indy组件等等等等。

【问题讨论】:

  • 听起来像IP Multicasting
  • 注意:我不是在编写即时消息或聊天程序。这只是一个用户可以向其他用户发送警报/消息的系统——他们不能互相回复!没有商业、共享软件等链接 - 请!我想听听您将如何编写这种类型的系统以及您将采用哪些方法,以及您可能会使用的 TCP IP 消息传递架构。无论是直接的 Winows API,Indy 组件等等等等。
  • @Shane 我已将您的注释移至应该说明的问题(而不是 cmets)。
  • 谢谢大家的回答!那么,你们对使用 indy 有什么看法,比如在这个演示中:indy10clieservr.sourceforge.net 或者使用 TServerSocket 和 TClientSocket 包 ?????
  • @Shane TClientSocket 和 TServerSocket 已过时且已过时。 Indy被替换为替代品。如果您计划一个长期项目,我建议您自己为 Winsock 创建简单的包装器。这并不难,而且您不必依赖质量有问题的第三方代码。

标签: delphi sockets delphi-2010 tcp


【解决方案1】:

要让它可靠地工作比你想象的要多 - 大约 5% 的努力让它工作,95% 的努力确保它在所有情况下都能正常工作,包括网络中断等。如果你去这里 (@987654321 @) 你可以看到我是如何实现我的进程间通信框架的。 TCP 内容包含大约 10,000 行使用 Indy 组件的代码。

【讨论】:

    【解决方案2】:

    关于使用 indy,例如在此演示中:indy10clieservr.sourceforge.net 或使用 TServerSocketTClientSocket

    -> 现在使用 INDY 的 x64 演示示例

    【讨论】:

      【解决方案3】:

      如果您想节省一些工作并使用现成的解决方案:

      按以上顺序。最后两个列出的目的是为了提供信息。

      IMO 0MQ 是最好的选择 - 它经过深思熟虑、轻量级、快速且可靠。

      【讨论】:

        【解决方案4】:

        如果这只是 Windows,并且您不想使用 3rd 方库,那么您可以跳过 TCP/IP 并使用Mailslots

        编辑:如果您想要保证交付,那么命名管道是一个更好的解决方案。 This SO question 有一个 few nice answers 和 Delphi 命名管道示例。

        邮槽是一种单向机制 进程间通信(IPC)。 应用程序可以将消息存储在 邮槽。邮件槽的所有者 可以检索存储的消息 那里。这些消息通常是 通过网络发送到任一 指定计算机或所有计算机 在指定的域中。域是一个 工作站和服务器组 共享一个组名

        他们不需要 Windows 域,而是通过 LAN 工作。

        DelphiPages 有一个不错的run-down on doing IPC in Delphi,包括邮槽。

        --杰罗恩

        【讨论】:

        • Mailslots 不保证交付并且有一些其他副作用,因此它们不是最佳选择。在 OP 的情况下,这是具有专用服务器的更清晰的 pub-sub 机制,并且 TCP 可以正常工作。然而,具有序列化消息等的适当发布-订阅是一项不平凡的任务。
        • 感谢您的发言;因为它,我添加了命名管道部分。
        【解决方案5】:

        【讨论】:

        • 对不起,不是真的在寻找即时消息或聊天。我正在寻找一个警报/消息系统(我可以使用 tcp ip 构建一个)。用重要消息提醒用户。
        • 我要提一下,一个用户不能互相回复的系统!
        • @Darian Miller 我已经为我的 delphi XE8 安装了 msgcommunicator v11。我想使用互联网进行客户端/服务器聊天。我喜欢这个组件,但在网上我找不到客户端/服务器的示例,我不知道如何使用?你能为我提供 msgcommunicator 客户端/服务器的简单示例吗?提前致谢!
        • @AlexKirov 对不起,我没有。这是很久以前的事了——如果他们现在不提供支持,我就不会使用它们。也许试试:imcomponents.com/ivc.htm
        【解决方案6】:

        看起来像发布-订阅消息。 kbmMW 提供一个。

        【讨论】:

        • 我想自己写这个,正如我在我的问题中所说,而不是依赖商业组件。我不太确定你建议的那一套甚至会做我想做的事——不过谢谢你的回复
        • @Shane “编写系统”是一个相当宽泛的短语。至于 kbmMW - 你真的检查过吗?如果您要编写自己的代码,那么成功的实现将是您开始的一个很好的示例。
        猜你喜欢
        • 2019-12-06
        • 2014-09-08
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-12
        • 2018-02-26
        • 2013-04-29
        相关资源
        最近更新 更多