Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MSComm и Telnet / 13 сообщений из 13, страница 1 из 1
04.02.2007, 23:59
    #34305169
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Есть некий прибор. VoiceFinder AP200B-шлюз IP-телефонии. Но суть не в этом.
Он настраивается через терминалку.
Вариант1: через консоль через COM-порт подключен к компьютеру
Вариант2: управляется через Telnet.
В "Ручном" режиме можно использовать HyperTerminal (как в случае com-port, так и в случае telnet). Причем интерфейс общения: команды, ответы будут выглядеть абсолютно одинаково.

В силу особенностей работы с прибором необходимо иногда программно менять его настройки.

Вариант1(com-port) Для этого используется Microsoft Comm Control 6.0 и программа на VB с возложенными на нее задачами отлично справляется.

Вариант2 (telnet).
Есть ли способ программно управлять прибором по сети, т.е.через telnet? Грубо говоря некая штука типа Microsoft Comm Control только для общения через telnet, а не через com-port?
...
Рейтинг: 0 / 0
05.02.2007, 05:20
    #34305269
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Winsock?
...
Рейтинг: 0 / 0
09.02.2007, 02:50
    #34317674
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Да, хорошая штука. Переписал свою программу, вроде все функционирует.
Один вопрос с ходу осилить не могу.

Программа устроена так, что она постоянно (сутками) наблюдает за прибором.
Периодически дает ему команды.

Прибор устроен таким образом, что после перезагрузки он полностью восстанавливает свое состояние, в том числе и с т.зр.возможности обращения к нему по telnet. Но на момент перезагрузки он какое-то время не виден.
В связи с этим 2 ситуации.

1. Программа пришла к выводу, что прибор надо перезагружать:
Код: plaintext
Winsock1.SendData "reboot" & vbCrLf
Программа знает, что связь разорвана, поэтому
Код: plaintext
Winsock1.Close
Далее предполагается, что связь надо восстановить:
Делаем
Код: plaintext
Winsock1.Connect
с какой-то периодичностью и в конце концов этот connect получаем:
Код: plaintext
1.
2.
Private Sub Winsock1_Connect()
LabRe.Caption = "OK"
End Sub
Далее можем продолжить программную работу с прибором.
Здесь все относительно просто.

2. Прибор по какой-то причине может решить перезагрузиться сам (самое простое- сбой питания). В этом случае программа об этом не знает. А связь тем не менее разорвана. Соответственно ни одна команда не пройдет. Программа либо вылетит, либо будет висеть. Есть ли способ как-то автоматически получить информацию об этом событии с целью запуска процедуры восстановления связи(процедура отработана в пункте 1)?

P.S. с com-port-ом проще: там связь не "теряется" в момент перезагрузки.
...
Рейтинг: 0 / 0
09.02.2007, 04:06
    #34317687
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
afaik такой возможности нет.
Но ее можно реализовать самому: прибор можно пинговать через разные промежутки времени. В зависимости от критчности работы, хоть каждые 5 секунд, типа: "Ты живой?" - "Да".


Magnus
...
Рейтинг: 0 / 0
09.02.2007, 08:01
    #34317773
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Перехватить ошибки и обрабатывать по ним
Я писал биллинг для VoIP шлюза на VB, через telnet
Решил эту проблему простым перехватом ошибок
On Error Goto Err
...
Рейтинг: 0 / 0
09.02.2007, 13:37
    #34319064
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
orunbekПерехватить ошибки и обрабатывать по ним
Я писал биллинг для VoIP шлюза на VB, через telnet
Решил эту проблему простым перехватом ошибок
On Error Goto Err
На каком событии ошибки? Я в свое время тоже делал подобные вещи, с кассовым аппаратом базарил по телнету. Как ни крутил - единственным выходом был пинг железяки, ибо никаких ошибок обрыва коннекта небыло.
...
Рейтинг: 0 / 0
09.02.2007, 14:13
    #34319281
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Забыл сказать, в моей проге нужно было периодически обращаться к шлюзу, т.е.
скажем каждые 5 сек, и если связь обрывалась выходила ошибка, которую и перехватывал
Насчет пинга, а если... скажем у вас оборвалась телнет связь, а сам шлюз пингуется?
Может периодически какую-нибудь простую команду нужно выполнять?
...
Рейтинг: 0 / 0
09.02.2007, 15:43
    #34319792
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
orunbekЗабыл сказать, в моей проге нужно было периодически обращаться к шлюзу, т.е.
скажем каждые 5 сек, и если связь обрывалась выходила ошибка, которую и перехватывал
Насчет пинга, а если... скажем у вас оборвалась телнет связь, а сам шлюз пингуется?
Может периодически какую-нибудь простую команду нужно выполнять?

Я это собственно иимел ввиду, какой либо простой запрос напрямую к девайсу и простой ответ на него, "Ты там?" "Да"
...
Рейтинг: 0 / 0
09.02.2007, 18:28
    #34320332
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Что нибудь сделаем.
Кстати, как ping программно сделать?
...
Рейтинг: 0 / 0
09.02.2007, 18:30
    #34320339
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Хотя согласен, пинг не выход.
5сек это уж слишком часто в моем случае,
а за это или похожее время прибор успеет исчезнуть и вновь появиться "на экранах радаров".
...
Рейтинг: 0 / 0
11.02.2007, 19:59
    #34322174
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Класс Пинг
Пример использования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set objPing = New clsPing
If objPing.SocketReady Then
    objPing.Ping strHost
    If objPing.PingStatus = ICMP_SUCCESS Then
    'Пингуется
    ElseIf objPing.PingStatus = ICMP_STATUS_BAD_DESTINATION Then
    'Неправильный адрес
    Else
    'Ошибка
        MsgBox objPing.PingStatusDescription
    End If
End If
...
Рейтинг: 0 / 0
12.02.2007, 00:48
    #34322468
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
Magnus23 Я это собственно иимел ввиду, какой либо простой запрос напрямую к девайсу и простой ответ на него, "Ты там?" "Да"
Так и сделал.
Код: plaintext
Winsock1.SendData  vbCrLf
И если все в порядке, то получаю приглашение командной строки:
Код: plaintext
AP200B#
А если нет, делаю ReConnect. Все вроде вполне прилично работает.

Теперь другая задача: на win98 все работает, а надо загнать программу на WIN2003, она там категорически отказывается работать, а возможности компилировать ее там на VB6 нет (о чем мой другой топик).
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.08.2010, 09:05
    #36772209
kitealex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSComm и Telnet
А вот код для управления вашим девайсом по сети


'устанавливаем соединение
Private Sub Command1_Click()
Winsock1.Connect "ip адрес железяки", "23"
End Sub

' шлем конфиг
Private Sub Command2_Click()
Winsock1.SendData "конфиг" & vbCrLf
......
Winsock1.SendData "еще конфиг" & vbCrLf
End Sub

'textbox text1 в котором видно что происходит

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim buffer As String
Winsock1.GetData buffer, vbString
Text1.Text = buffer + Text1.Text & vbCrLf
End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MSComm и Telnet / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]