I'd like to differentiate them based on address.
The only problem is, I am running many instances of the program from my local machine, so they all have the same address.
So you can't differentiate them based only on address.
Would it be possible to assign a separate port for each sender?
Yes, if they all use different sockets.
Would the receiver be able to listen on all ports?
The receiver doesn't need to listen on different ports. You only send to one port, you only need to receive on one port.
The problem with this comes if senders are also receivers. If that's the case it won't work: you will have an explosion of ports and you will basically have to multicast to all known ports, which isn't multicasting at all really. In which case you will need to devise a unique client ID, say a UUID.