I want to use sockets (Dgram/UDP) for interprocess communication. The goal is to write 2 programs - one should send data (called sender), one should receive it (called receiver). Since I'm on the same machine, I'm using the loopback adapter, port 11000 (taken from MSDN Socket.ReceiveFrom example).
Relevant parts of sender
// Create
var endPoint = new IPEndPoint(IPAddress.IPv6Loopback, 11000);
var socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
// Send
socket.SendTo(buffer, endPoint); // buffer is byte[4]
// Dispose
socket.Close();
Relevant parts of receiver
// Create
var endPoint = new IPEndPoint(IPAddress.IPv6Loopback, 11000);
var socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)
var sender = new IPEndPoint(IPAddress.IPv6Loopback, 11000);
var senderRemote = (EndPoint) sender;
socket.Bind(endPoint);
// Loop
socket.ReceiveFrom(buffer, 4, SocketFlags.None, ref senderRemote); // buffer is byte[4]
// Finally
socket.Close();
It's no problem to launch two instances of the sender and send data from both applications. All packets are received in the receiver. But I can only launch one instance of the receiver, because the end point is already bound.
I guess I'm understanding something wrong, but I thought the very idea of UDP was to allow for multiple receivers rather than multiple senders?
Why does doing the "weird" thing (multiple senders) work but the "obvious" thing (multiple receivers) does not? Where am I going wrong, and what do I need to change to allow for multiple receivers?