Подключение к серверу по UDP

Написан сервер на c#

        class Program
{
    static IPAddress remoteAddress; // хост для отправки данных
    static int remotePort; // порт для отправки данных

    static void Main(string[] args)
    {
        try
        {
            remotePort = int.Parse(ConfigurationManager.AppSettings.Get("remotePort"));
            remoteAddress = IPAddress.Parse(ConfigurationManager.AppSettings.Get("remoteAddress"));
            SendNumber();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    private static void SendNumber()
    {
        UdpClient sender = new UdpClient();
        IPEndPoint endPoint = new IPEndPoint(remoteAddress, remotePort);

        try
        {
            while (true)
            {
                GeneratingNumbers.Generate();
                var number = GeneratingNumbers.Generate();

                byte[] data = Encoding.Unicode.GetBytes(number.ToString());
                Console.WriteLine(number);
                sender.Send(data, data.Length, endPoint);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            sender.Close();
        }
    }
}

Далее написал клиент

   class Program
{
    static IPAddress remoteAddress;
    const int localPort = 8001; // локальный порт для прослушивания входящих подключений

    static void Main(string[] args)
    {
        try
        {
            remoteAddress = IPAddress.Parse("235.5.5.11");
            Thread receiveThread = new Thread(new ThreadStart(ReceiveNumber));
            receiveThread.Start();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    private static void ReceiveNumber()
    {
        UdpClient receiver = new UdpClient(localPort);
        receiver.JoinMulticastGroup(remoteAddress, 20);
        IPEndPoint remoteIp = null;

        try
        {
            while (true)
            {
                byte[] data = receiver.Receive(ref remoteIp);
                string number = Encoding.Unicode.GetString(data);
                Console.WriteLine(number);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            receiver.Close();
        }
    }
}

Запускаю клиент и сервер все отрабатывает. Но если я запущу еще один клиент, то он не запуститься с ошибкой

Unhandled exception. System.Net.Sockets.SocketException (10048): Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт).
   at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at System.Net.Sockets.UdpClient..ctor(Int32 port, AddressFamily family)
   at System.Net.Sockets.UdpClient..ctor(Int32 port)
   at ClientApp.Program.ReceiveNumber() in D:\ProjectProgram\TestClientServer\ClientApp\Program.cs:line 30
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

Подскажите пожалуйста, что реализовано не так или я как-то тестирую не верно.


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