Chr*_*ase 10 delphi multicast indy delphi-7 indy-9
我试着编写一个服务器/服务,在局域网上传播消息的时间大约是一秒钟,有点像服务发现.
该消息需要由可能位于同一台计算机或不同计算机上的多个客户端程序接收.但是每台机器上可能同时运行多个程序.
我使用delphi7,indy 9.0.18
如果我应该使用UDP(TIdUDPClient/Server)或IP MultiCast(TIdIPMCastClient/Server)或者如果它甚至可能...
我设法让它与IP Multi Cast一起使用每台机器一个客户端,但即使经过多次使用不同的绑定..最大/最小端口等,我似乎无法找到解决方案.
我想你正在寻找SO_REUSEADDR套接字选项.在套接字上设置该选项允许多个套接字在同一端口上侦听.对于多播,Windows保证将消息传递到所有套接字(否则消息只会随机传递到一个套接字).
您通常通过调用setsockopt来执行此操作,但我不是Delphi开发人员,因此我不确定您的API是什么样的.这个问题似乎显示了某人在Delphi中做类似事情的例子.
我从来没有这样做,但似乎"mailslots"就是你所需要的.它将在本地网络上广播一条消息,并接收其他知道如何回复的工作站的回复.这就是流行的"犰狳"许可管理器的工作方式(确保注册密钥不会"超额认购").我的应用程序(ClipMate)使用Armadillo作为保护包装器(共享软件包装器).当注册用户运行应用程序时,它会检查同一网络上的其他计算机是否正在使用相同的密钥.它基本上说:"我正在使用1234号许可证,你呢?" 它等待回复(我在启动期间在一个单独的线程中执行此操作,因此我不会阻止我的启动).如果其他工作站报告他们使用相同的密钥,我会根据许可证中包含的席位数来核对计数.我不完全确定它在Windows7上是如此强大....