C# 如何以C语言向我的所有应用程序发送一条消息?

C# 如何以C语言向我的所有应用程序发送一条消息?,c#,tcp,C#,Tcp,我一直在研究使用TCP通过网络发送消息 我目前的情况是,我有一台计算机上运行的单个应用程序的多个实例。我想发送一条TCP消息,让所有应用程序接收该消息并对其执行操作 我所能找到的只是一个发送者和一个接收者的例子。我不想只向网络发送TCP消息,让所有侦听应用程序接收相同的消息 我尝试过使用它,但它似乎也不适用于多个接收器 有没有人能给我指出一个正确的方向,让我找到一个我在上面所描述的指南,或者举一些例子 编辑:我试图发送的只是一个10个字符的字符串,也许还有另一种发送/接收类似内容的方法?如果您想

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

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

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

我尝试过使用它,但它似乎也不适用于多个接收器

有没有人能给我指出一个正确的方向,让我找到一个我在上面所描述的指南,或者举一些例子


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

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

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


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

一旦您的应用程序需要增加,就用使用MSMQ或类似enterprisey的接口实现替换接口实现


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

这些是GUI应用程序吗?如果是,您可以使用目标为HWND\U广播的
SendMessage
PostMessage
。(尽管这只允许您发送一对数字,而不是“字符串”)

更复杂的,但正是为了这个目的而设计的,是一个

另一方面,邮件槽是一个进程向多个进程广播消息的简单方法


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

  • 创建映射文件(使用特定名称,如“XXX”)

    • 它将在内存中创建一个以字节为单位的数组
    • 将第一个字节设置为零(0)或可以自己定义的值。(此字节将确定传入消息)
  • 如果一个应用程序希望向其他应用程序发送消息:

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

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

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

  • 希望这能解释你如何解决这个问题

    @Adriano我正在检查这个问题……你不能在本地广播中使用UDP吗?就我个人而言,我会使用一个预先存在的集线器。也许redis pub/sub-这对设置来说非常简单(即零配置、零注册-只是
    “发布频道名称消息”
    ),UDP广播听起来像是我需要的协议。谢谢你到目前为止的建议。如果你想有一个可靠的网络通信,UDP不是你想要的。它缺少错误传递检查并在失败时重试(TCP具有的功能)。但是,如果您只在单个接口上本地工作,或者不关心消息是否确实会被接收,那么请尝试:)