PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Отправка и прием данных telnet.


Отправка и прием данных telnet.

Сообщений 1 страница 4 из 4

1

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

Код:
Global port = 23 ; Порт
Global conID.i ; ИД соединения

Procedure.s connect(stat.s) ;Процедура подключения с возвратом сообщения о статусе подключения
  ConID.i = OpenNetworkConnection("192.168.0.138", Port, #PB_Network_TCP|#PB_Network_IPv4) ; Подключение к хосту
  If conID.i > 0
    stat.s="Ok"
  Else
    stat.s="Error"
EndIf
ProcedureReturn stat.s ; Возврат статуса соединения
EndProcedure

Procedure sendData(message.s) ; Процедура отправки сообщения
  *Buffer_to = AllocateMemory(100)
  mem=PokeS(*Buffer_to,Chr(94) + message.s + Chr(13), #PB_Ascii)  ; Формат bestcode
  SendNetworkData(ConID.i, *Buffer_to, mem)
  FreeMemory(*Buffer_to)
EndProcedure

Procedure reservData(con.i) ; Процедура приема сообщения
  message.s
  size.i
  Repeat
   Select NetworkClientEvent(ConID.i)
     Case #PB_NetworkEvent_Data
        *mem = AllocateMemory(100)
        size.i = ReceiveNetworkData(ConID.i, *mem, 100)
        message.s = PeekS(*mem, size, #PB_Ascii)
        FreeMemory(*mem)
        Debug message.s
      Case #PB_NetworkEvent_None
        Delay(30)
      Case #PB_NetworkEvent_Disconnect
        Debug "Closed"
        Quit = 1
   EndSelect
 Until Quit
EndProcedure

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf 
  ConID.i = OpenNetworkConnection("192.168.0.138", Port, #PB_Network_TCP|#PB_Network_IPv4) ; Подключение к хосту
  If conID.i <> 0
    stat.s="Ok"
  Else
    stat.s="Error"
EndIf
Debug stat.s
ThreadID=CreateThread(@reservData(),conID.i)
For i = 1 To 50 Step 1
  Delay (500)
  sendData("vv")
Next i
End

Но по прошествии 16 - 20 отправленных и полученных сообщений, соединение рвется.

Отредактировано Dadenard (14.04.2021 07:49:41)

0

2

Включена поддержка многопоточности?

Dadenard написал(а):

Но по прошествии 16 - 20 отправленных и полученных сообщений, соединение рвется.

Соединение разрывает девайс. Нужно смотреть почему.

Код можно немного оптимизировать.

Код:
Procedure sendData(message.s) ; Процедура отправки сообщения
  SendNetworkString(conID,  Chr(94) + message + Chr(13), #PB_Ascii)
EndProcedure

0

3

Пётр написал(а):

Включена поддержка многопоточности?

Да включена, но я создавал второй поток чтобы смотреть ответ устройства пока сниффер не подключил

Пётр написал(а):

Соединение разрывает девайс. Нужно смотреть почему.

Снял дамп wireshark, purebasic посылает пакет tcp с флагом reset=1

0

4

Пётр написал(а):

Соединение разрывает девайс. Нужно смотреть почему.

https://forumupload.ru/uploads/0009/ae/28/606/t650631.png

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Отправка и прием данных telnet.