Tag: multicast

没有网络依赖的进程间pubsub

假设我的计算机上没有安装网卡,我希望function类似于以下内容: 进程1将消息发布到某个URI,例如“Uri1” var publisher = new Publisher(“Uri1”); publisher.publish(new Message(“Somedata”); 进程2将监听“Uri1”上的消息并将消息发布到“Uri2” var subscriber = new Subscriber(“Uri1”) subscriber.MessageReceived += data => Console.Writeline(data.ToString()); var publisher = new Publisher(“Uri2”) publisher.Publish(new Message(“SomeMoreData”)) 进程3将侦听来自两个URI的消息 var subscriber = new Subscriber(“Uri1”) subscriber.MessageReceived += data => Console.Writeline(data.ToString()); var anotherSubscriber = new Subscriber(“Uri2”) anotherSubscriber.MessageReceived += data => Console.Writeline(data.ToString()); 所有进程都在同一台计算机上运行。 经过一些研究后,我相信MSMQ是可行的方法(使用队列名称作为URI),但实施问题仍然存在。 我遇到了几种可能性: 直接使用MSMQ 我用这种方法遇到的问题是我必须管理我自己的队列,例如创造,人口,清除…也从我读到的内容中我可能会遇到许多陷阱和MSMQ的局限性因为我没有经验 使用NServiceBus , […]

通过套接字最简单的广告/听力安排

以下简单安排有什么问题。 我所做的就是创建一个多播消息的UDP广告商,以及一个加入多播组以接收此消息的侦听器,两者都在同一台机器上运行。 string Port = “54153”; HostName Host = new HostName(“224.3.0.5”); //a multicast range address //listener var L = new DatagramSocket(); L.MessageReceived += (sender2, args) => { /*something*/ }; await L.BindServiceNameAsync(Port); L.JoinMulticastGroup(Host); //advertiser var AdvertiserSocket = new DatagramSocket(); AdvertiserSocket.Control.MulticastOnly = true; Stream outStream = (await AdvertiserSocket.GetOutputStreamAsync(Host, Port)).AsStreamForWrite(); using (var writer = new StreamWriter(outStream)) { await […]

如何在C#中确定组播数据包的源IP?

我需要确定向我发送多播数据包的机器的IP,以便我可以通过单播响应它。 我正在使用以下csharp(.Net 3.5)代码通过多播连接接收数据包(为简洁起见,已编辑代码,并删除了错误检查和不相关的选项): IPEndPoint LocalHostIPEnd = new IPEndPoint(IPAddress.Any, 8623); Socket UDPSocket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); UDPSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, 1); UDPSocket.Bind(LocalHostIPEnd); //Join the multicast group UDPSocket.SetSocketOption( SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(“225.2.2.6”))); IPEndPoint LocalIPEndPoint = new IPEndPoint(IPAddress.Any ,Target_Port); EndPoint LocalEndPoint = (EndPoint)LocalIPEndPoint; // Create the state object. StateObject state = new StateObject(); state.buffer.Initialize(); state.workSocket = UDPSocket; state.id = “state0”; //Set […]

在C#中为运行时的接口创建一个类

我正在考虑使用一组对象,假设此时有3个对象存活,它们都实现了一个公共接口,然后将这些对象包装在第四个对象中,同时实现相同的接口。 第四个对象的方法和属性的实现将简单地调用这3个底层对象上的相关位。 我知道这里会出现这样的情况,这样做是没有意义的,但这是针对服务多播体系结构的,因此已经有了一套很好的限制。 我的问题是从哪里开始。 第四个对象的生成应该在内存中,在运行时完成,所以我在想Reflection.Emit ,遗憾的是我没有足够的经验来知道从哪里开始。 我是否必须构建内存中的程序集? 它看起来确实如此,但我只想快速指向我应该从哪里开始。 基本上我正在寻找一个接口,以及一个实现该接口的对象实例列表,并构建一个新对象,同时实现该接口,该接口应该“多播”所有方法调用和对所有底层对象的属性访问,at尽可能少。 exception会有很多问题,但是当我到达它们时我会解决这些问题。 这适用于面向服务的体系结构,我希望现有的代码(例如,记录器服务)现在可以访问多个记录器服务,而无需更改使用服务的代码。 相反,我想运行时生成一个logger-service-wrapper,它在内部简单地调用多个底层对象上的相关方法。 这适用于.NET 3.5和C#。

通过互联网UDP多播?

我不确定如何最好地解决我的问题。 我有一个服务,在远程机器上运行接收和处理UDP数据包。 我希望服务能够将这些数据包重新发送给碰巧想要它们的任何人(可能是没有人,通常是一台机器,但可能更多) 我认为UDP多播是理想的 – 服务可以发送到多播组,无论有多少接收者注册,或者即使没有。 但是,我希望能够通过互联网访问这些内容,而且从我收集到的内容中,这对于UDP多播来说几乎是不可能的。 我可能会用另一种方法来实现这个目标吗? 如果相关,我的客户端和服务都是用C#编写的。