Принять данные с IP-камеры по UDP - C#

Узнай цену своей работы

Формулировка задачи:

Приветствую! Есть ip камера работающая по UDP, она получая определенную команду начинает в бинарном виде валить данные. Написал такой код:
  public void getJpg()
        {
 
            ipcam_command_t camcmd = new ipcam_command_t();
            //Инициализируем массив
            camcmd.param = new int[15];
 
            ipcam_packet_t buffer = new ipcam_packet_t();
            buffer.reserved = new int[3];
            buffer.data = new byte[CAPTURE_BUFFER_SIZE];
 
            camcmd.cmd = IPCAM_CMD_START;   // Формируем команду
            camcmd.flags = 0;
 
            // Создаем UdpClient
            UdpClient sender = new UdpClient();
            // Создаем endPoint по информации об удаленном хосте
            IPEndPoint endPoint = new IPEndPoint(remoteIPAddress, Port);
            try
            {
                // Отправляем данные полученные как массив байт
                byte[] bytes = camcmd.GetBytes();
                sender.Send(bytes, bytes.Length, endPoint);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Возникло исключение: " + ex.ToString() + "\n  " + ex.Message);
            }
            finally
            {
                // закрыть соединение
                sender.Close();
            }
}
Команда приходит успешно, и камера начинает отвечать ( смотрю с помощью wireshark ) Читать пытаюсь вот таким образом, в отдельном потоке:
        public static void Receiver()
        {
            // Создаем UdpClient для чтения входящих данных
            UdpClient receivingUdpClient = new UdpClient(Port);
            IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Parse("192.168.2.55"), Port);
            //IPEndPoint RemoteIpEndPoint = null;
 
            //receivingUdpClient.Connect(IPAddress.Parse("192.168.2.55"), Port);
 
            try
            {
                while (true)
                {
                    // Ожидание дейтаграммы
                    byte[] receiveBytes = receivingUdpClient.Receive( ref RemoteIpEndPoint );
 
                    // Преобразуем и отображаем данные
                    string returnData = Encoding.UTF8.GetString(receiveBytes);
                    Console.WriteLine(" --> " + returnData.ToString());
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Возникло исключение: " + ex.ToString() + "\n  " + ex.Message);
            }
        }
Но не приходит никаких данных! Самое интересное, когда я с помощью другой программы пишу на этот порт по ip 127.0.0.1 - данные отображаются, подскажите , что я не правильно делаю?

Решение задачи: «Принять данные с IP-камеры по UDP»

textual
Листинг программы
public void Start()
        {
            try
            {
                // Создаем UdpClient
                sender = new UdpClient();
                // Создаем endPoint по информации об удаленном хосте
                endPoint = new IPEndPoint(remoteIPAddress, Port);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5