3

我一直在研究使用 TCP 通过网络发送消息。

我目前的情况是我在计算机上运行单个应用程序的多个实例。我想发送一条 TCP 消息并让所有应用程序接收该消息并对其采取行动。

所有我能找到的例子有 1 个发送者和 1 个接收者。我不想只是向网络发送一条 TCP 消息,然后让所有监听应用程序接收相同的消息。

我尝试使用本指南,但它似乎也不适用于多个接收器。

任何人都可以将我指向正确的方向,以指导我在上面描述的内容或发布一些示例吗?

编辑:我要发送的只是一个 10 个字符的字符串,也许还有另一种发送/接收类似内容的方法?

4

4 回答 4

1

您可以使用 C# 中的共享内存来实现您的要求。让我解释一个简单的解决方案:例如:

  1. 创建一个映射文件(具有特定名称,例如“XXX”),

    • 它将在内存中创建一个字节数组,
    • 将第一个字节设置为零 (0) 或值您可以定义自己的值。(这个字节将决定传入的消息)
  2. 如果一个应用程序想向其他应用程序发送消息:

    • 将数据(使用 UTF-8 或任何编码转换为字节数组)从第三个元素(索引 = 2)写入内存数组
    • 设置第一个字节(索引=0)为1
    • 将第二个字节设置为随机值(为什么我使用这个字节?我将在下面解释。)
  3. 在接收端,他们还打开同名“XXX”的映射文件

    • 他们需要在第一个字节上触发以检测传入的消息。您可以使用 Timer(间隔可以是 500 毫秒)来检查该字节
    • 如果第一个字节是 1 -> 它有传入消息,则从第三个元素(从索引 2)读取数据
  4. 您现在可以接收来自其他应用程序的消息,但是有一个小问题:

    • 在下一个触发器中,应用程序仍然继续将其视为有新的传入消息。
    • 所以此时,您需要读取第二个(随机)字节的值并将其存储为备份,以便在下次触发时进行比较。
    • 如果备份 id 不等于新 id,则这是一条真正的新传入消息

希望这能解释您如何解决问题

于 2016-11-01T04:35:19.783 回答
0

Are these GUI applications? If yes, you could use SendMessage or PostMessage with a destination of HWND_BROADCAST. (although this will only let you send a pair of numbers, not a "string")

More complex, but designed exactly for this purpose, is a mailslot.

Mailslots, on the other hand, are a simple way for a process to broadcast messages to multiple processes

于 2012-06-09T19:28:26.640 回答
0

如果您想向所有应用程序实例发送消息,您可以查看SignalR.

有几篇文章确实介绍了这个框架:

于 2012-06-06T12:30:08.283 回答
0

可能愚蠢但简单且可能......当通过一个干净的接口抽象时可能是一个好的开始:为应用程序选择一个共享目录,将包含消息的文件写入该目录并使用 FileWatcher 监听目录中的更改。

一旦您的应用程序需求增加,请用使用 MSMQ 或类似企业的接口实现替换接口实现。

另一个简单的解决方案是共享内存/内存映射文件。该 API 自 v4 起包含在 .NET 框架中。不过,您必须手动进行读/写同步。

于 2012-06-06T13:04:09.120 回答