Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Проблема с API на VB.net. Пример.

    Проблема с API на VB.net. Пример.

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Проблема с API на VB.net. Пример., RouterOS
     
    Usogi
    Guest
    #1
    0
    01.06.2013 20:46:00
    Привет, я ковыряюсь с программой для входа в роутер и получения информации через API. Использую пример на VB.net, который есть на вики: http://wiki.mikrotik.com/wiki/API_in_VB_dot_NET. Для большинства задач это работает отлично. Но в некоторых случаях, в основном для запросов, возвращающих большой объем информации, программа завершается с ошибкой. Я сузил область поиска до этого участка кода:

    ```
    Public Function Read() As List(Of String)
       Dim output As New List(Of String)
       Dim o = ""
       Dim tmp(4) As Byte
       Dim count As Long

       While True
           tmp(3) = tcpStream.ReadByte()
           Select Case tmp(3)
               Case 0
                   output.Add(o)
                   If o.Substring(0, 5) = "!done" Then
                       Exit While
                   Else
                       o = ""
                       Continue While
                   End If
               Case Is < &H80
                   count = tmp(3)
               Case Is < &HC0
                   count = BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(3), 0, 0}, 0) ^ &H8000
               Case Is < &HE0
                   tmp(2) = tcpStream.ReadByte()
                   count = BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(2), tmp(3), 0}, 0) ^ &HC00000
               Case Is < &HF0
                   tmp(2) = tcpStream.ReadByte()
                   tmp(1) = tcpStream.ReadByte()
                   count = BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(1), tmp(2), tmp(3)}, 0) ^ &HE0000000
               Case &HF0
                   tmp(3) = tcpStream.ReadByte()
                   tmp(2) = tcpStream.ReadByte()
                   tmp(1) = tcpStream.ReadByte()
                   tmp(0) = tcpStream.ReadByte()
                   count = BitConverter.ToInt32(tmp, 0)
               Case Else
                   Exit While 'err
           End Select

           For i = 0 To count - 1
               o += ChrW(tcpStream.ReadByte())
           Next
       End While
       Return output
    End Function
    ```

    В частности, все работает нормально, когда используется эта часть (небольшое количество данных):

    ```
    Case Is < &H80
       count = tmp(3)
    ```

    Но я получаю ошибку, когда доходит до этой части:

    ```
    Case Is < &HC0
       count = BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(3), 0, 0}, 0) ^ &H8000
    ```

    Эта часть кода фактически присваивает `count = "Infinity"`, поэтому я уверен, что это неправильно. Я публиковал вопросы на некоторых VB.Net форумах и пытаюсь разобраться, что это делает, но безрезультатно. Если кто-нибудь сталкивался с подобным или может подсказать, куда мне обратиться, буду очень благодарен. Спасибо! –Usogi
     
     
     
    dancms
    Guest
    #2
    0
    03.12.2013 19:57:00
    Как бы ты передал аргумент для примера, подобного вышеуказанному, используя vb.net, ведь нет валидной команды API? /ip/add/print/where comment=“somecomment”
     
     
     
    dancms
    Guest
    #3
    0
    04.12.2013 05:15:00
    Похоже, продвигаюсь, но ошибки все еще есть: Target возвращает ошибку. COMMAND: /ip/arp/print =.proplist=mac-address =?address=x.x.x.x ERRORS: =message=unknown parameter RESPONSE: !trap =message=unknown parameter !done Кто-нибудь может проверить, правильно ли я использую синтаксис для API-команд? (IP-адрес закомментирован) Я не нашел примера простого API-чтения с параметром запроса для коннектора mikrotik4tik, хотел бы расширить пример, который был опубликован выше, чтобы у других была справка. Спасибо.
     
     
     
    janisk
    Guest
    #4
    0
    04.12.2013 06:43:00
    /ip/arp/print =.proplist=mac-address =?address=x.x.x.x, тебе нужно изменить на это: /ip/arp/print =.proplist=mac-address ?address=x.x.x.x
     
     
     
    dancms
    Guest
    #5
    0
    04.12.2013 13:16:00
    Вот как я отправляю это из своей программы. Вывод, который я вставил, был получен при отладке при выполнении кода. Возможно, я не вызываю правильную функцию ExecuteReader() из класса miktotik4tik. У кого есть опыт работы с этой реализацией API? Спасибо, что указали на правильные команды API, чтобы я не гонялся за не той проблемой.
     
     
     
    dancms
    Guest
    #6
    0
    04.12.2013 14:56:00
    Вот код: Используя Session As New TikSession(TikConnectorType.Api) session.Open(“mikrotikip”, “user”, “password”) Dim api As Connector.Api.IApiConnector = session.Connector Dim params As New Dictionary(Of String, String) params.Add(“.proplist”, “mac-address”) params.Add(“?address”, “x.x.x.x”) Dim result As Object = api.ApiExecuteReader(“/ip/arp/print”, params) Me.txtMacAddress.Text = (result(0).GetStringValueOrNull(“mac-address”, True)) End Using
     
     
     
    dancms
    Guest
    #7
    0
    05.12.2013 16:30:00
    Исправлено — форматирование элементов propertylist и элементов фильтра задается клиентом API mikrotik4net, а также добавляется оператор ‘print’. Пример запроса с использованием vb.net с добавленным запросом фильтра:

    ```vb.net
    Using session As New TikSession(TikConnectorType.Api)
       Dim filter As New TikConnectorQueryFilterDictionary
       filter.Add(“address”, “x.x.x.x”)
       Dim propertylist As New List(Of String)
       propertylist.Add(“mac-address”)
       session.Open(“MikrotikIP”, “user”, “pass”)
       Dim api As Connector.Api.IApiConnector = session.Connector
       Dim result As Object = api.ExecuteReader(“/ip/arp”, ExecuteReaderBehaviors.None, (propertylist), Filter)
       Me.txtMacAddress.Text = (result(0).GetStringValueOrNull(“mac-address”, True))
    End Using
    ```

    Dan
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры