Лишь один UdpClient получает сообщение C#

Всем добрый день. Недавно я создал сырой мессенджер в консольном приложении, работающий только по локальной сети, но свою основную функцию он выполняет, к сожалению, лишь наполовину. При запуске нескольких клиентов лишь один имеет возможность получать сообщения от остальных, но не может их отправлять, тогда как с другими ситуация абсолютно обратная. Я пробовал также запускать программу с разных устройств и всё оставалось неизменным. Опишите, пожалуйста, в чём может быть проблема?

using System.Net.Sockets;
using System.Net;
using System.Text;

int Port = 8001;
IPAddress brodcastAddress = IPAddress.Parse("235.5.5.11");

Console.Write("Имя пользователя: ");
string? username = Console.ReadLine();

Task.Run(ReceiveMessageAsync);
await SendMessageAsync();

async Task SendMessageAsync()
{
    using var user = new UdpClient();

    while (true)
    {
        string? message = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(message)) break;

        message = $"{username}: {message}";
        byte[] data = Encoding.UTF8.GetBytes(message);
        await user.SendAsync(data, new IPEndPoint(brodcastAddress, Port));
    }
}

async Task ReceiveMessageAsync()
{
    using var receiver = new UdpClient(Port);
    receiver.JoinMulticastGroup(brodcastAddress);

    while (true)
    {
        var result = await receiver.ReceiveAsync();

        string message = Encoding.UTF8.GetString(result.Buffer);
        Console.WriteLine(message);
    }
}

Ответы (1 шт):

Автор решения: Toporka

Проблема была решена. Как оказалось, нельзя было отдавать общий порт клиенту в конструктор, иначе он забирал его себе и становился на место общего сервера для отправки сообщений. Вот изменённый кусочек кода:

async Task ReceiveMessageAsync()
{
    using var user_receive = new UdpClient();

    user_receive.ExclusiveAddressUse = false;
    var end_point = new IPEndPoint(IPAddress.Any, 8001);
    user_receive.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
    user_receive.ExclusiveAddressUse = false;

    user_receive.Client.Bind(end_point);
    user_receive.JoinMulticastGroup(brodcastAddress);
    //Console.WriteLine($"{name} вошёл в чат.");

    while (true)
    {
        var result = await user_receive.ReceiveAsync();

        string str = Encoding.UTF8.GetString(result.Buffer);
        Console.WriteLine(str);
    }
}
→ Ссылка