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

157
29 мая 2022, 12:10

Написан сервер на 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()

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

READ ALSO
Поясните, как работать с LockBits классом

Поясните, как работать с LockBits классом

В своём проекте я использую изображения большого разрешения, из-за чего методы getpixel/setpixel работают очень медленно, то-есть програма лагает,...

209
Создание объекта при помощи Instantiate в update в unity

Создание объекта при помощи Instantiate в update в unity

Делаю игру, столкнулся с проблемой - мне нужно, чтобы объект создался всего один раз при помощи instantiate в void UpdateПробовал использовать bool, но не получилось

255
BmpBitmapEncoder сохранение в 24 битном формате

BmpBitmapEncoder сохранение в 24 битном формате

есть вот такой код, в wpf, выводит изображение и сохраняет его в bmpНо bmp сохраняется в 32-ух битном формате, как можно сохранять в 24х битном?

161
elm.Attribute("").Value не равно

elm.Attribute("").Value не равно

Объясните, пожалуйста, почему не работает:

262