首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi网络编程

Delphi网络编程
EN

Stack Overflow用户
提问于 2008-09-12 10:23:31
回答 7查看 5.1K关注 0票数 4

我有一个用Delphi2006编写的经典的客户机/服务器(胖客户机和数据库)程序。当客户端满足某些条件时,我需要非常迅速地通知所有其他客户端。到目前为止,这是使用UDP广播完成的,但这不再可行,因为客户端现在从LAN外部连接,并且UDP广播仅限于本地网络。

我知道Indy库,但不太确定要使用哪些组件以及如何构建它。我猜我需要有一个客户端连接的服务器,它将接收和分发消息...?有没有样品可以让我开始呢?

还有没有其他组件集或技术我也应该看看呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-09-12 10:36:01

简单的答案是,Delphi (和其他工具)中可用的标准协议不允许反向通知。在我想使用SOAP的一个项目中,我对此进行了研究。它们都假设客户端请求服务器,服务器响应,仅此而已。

对我来说,解决方案是RemObjects SDK。这允许您向客户端发送通知,并且通知可以包含您喜欢的任何数据(就像客户端到服务器一样)。我自己使用SuperTCP连接,但它也可以与其他人一起工作。它仍然可以为必须使用它的客户端提供SOAP接口,但在您可以同时控制客户端和服务器的情况下,它工作得非常好。

票数 4
EN

Stack Overflow用户

发布于 2008-09-12 17:24:16

有一些非常简单的方法可以用RemObjects做到这一点,尽管我确信Delphi SDK也能很好地工作。

  1. 有一个中央服务器,上面有一个* TIdTCPServer监听*。然后每个客户端都有一个TIdTCPClient。它们连接到服务器和读上的数据块,等待服务器写入。一旦服务器通过侦听套接字接收到通知,它就向每个等待的客户端广播。这几乎是所有客户端的即时通知。
  2. 有一个中央服务器,上面有一个TIdTCPServer listening。然后每个客户端都有一个TIdTCPClient。这些客户端可以"ping“服务器,以定期请求更新(使用会话令牌来维护状态)。间隔的频率决定了通知的速度。当其中一个客户端需要通知其他客户端时,它只通知服务器。然后,服务器使用消息队列创建所有活动客户端会话的列表,并为每个会话添加通知。然后,下一次每个客户端连接时,它会向它发出通知,并将其从数据库中的queue.
  3. Maintain会话表中删除,其中每个客户端定期更新它们具有活动会话,并在断开连接时将其自身删除。您将需要一个删除失效会话的维护过程。然后,您就有了一个消息队列表,客户端可以将更新写入到该表中,每个当前活动会话对应一行。然后,其他客户端可以定期ping该表,以查看其会话是否有任何挂起的通知,如果有,它可以读取它们,对它们执行操作,然后删除它们。
  4. 某种对等方法是客户端通过数据库中的信息知道彼此,然后它们直接连接到彼此,并通知或请求通知(取决于防火墙和NAT配置)。稍微复杂一点,但还是有可能的。

显然,实现的选择将取决于您的设置和需求。为了达到最好的效果,有必要进行调整。

您需要的组件是TIdTCPServer (侦听器)和TIdTCPClient (发送器)。这两个都在Delphi的Indy库中。

票数 2
EN

Stack Overflow用户

发布于 2008-09-15 18:59:56

来自http://www.overbyte.be的ICS组件非常棒。a.)兼容性比Indy b更好。)PostCard是一个很好的例子和支持。使用TClientSocket和TServerSocket

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档