Seite 1 von 2

Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 03.04.2016 17:16
von funkheld
Hallo, guten Tag.

Wie kann man bitte die Netzwerkverbindung abfragen ?
Im unteren Programm funktioniert es nicht.
Das Programm stürzt ab und wird bei Nichtverbindung nicht abgefangen.

Habe die neueste Purebasicversion.

-------------------------
If InitNetwork() = 0
MessageRequester("Error", "Kein Netzwerk !", 0)
End
EndIf
-------------------------

Danke.

Gruss

Code: Alles auswählen

Global buffer.l,TEST.l,itest.l
Global text_e.s, url.s, str_1.s
Global zahl.a
Global pi.f,winkel.f,x1.f,y1.f,wd.f

Enumeration
  #Window_0
  #Editor_0
  #vor
  #zur
  #links
  #rechts
  #mitte
  #cls
  #v0
  #v1
  #v2
  #hlinks
  #hrechts
  #servo0
  #servo1
  #sharp
  #ton
  #canv
EndEnumeration

If InitNetwork() = 0
  MessageRequester("Error", "Kein Netzwerk !", 0)
  End
EndIf
  
url= "http://192.168.2.101/?pin=vor" 

OpenWindow(#Window_0,500,200,900,550,"esp-webserver-http", #PB_Window_SystemMenu)
CanvasGadget(#canv, 380, 20, 400, 400)

AddWindowTimer(#Window_0, 123, 400)

EditorGadget(#Editor_0, 10, 200, 280,300)

ButtonGadget(#vor, 120,20, 40, 25, "vor")
ButtonGadget(#zur, 120,80, 40, 25, "zurück")
ButtonGadget(#mitte, 120,50, 40, 25, "mitte")
ButtonGadget(#hlinks, 75,50, 40, 25, "hlinks")
ButtonGadget(#links, 30,50, 40, 25, "links")
ButtonGadget(#rechts, 210,50, 40, 25, "rechts")
ButtonGadget(#hrechts, 165,50, 40, 25, "hrechts")
ButtonGadget(#cls, 310,200, 40, 25, "cls")
ButtonGadget(#v0, 310,20, 40, 25, "v0")
ButtonGadget(#v1, 310,50, 40, 25, "v1")
ButtonGadget(#v2, 310,80, 40, 25, "v2")
ButtonGadget(#servo0, 120,140, 40, 25, "servo0")
ButtonGadget(#servo1, 165,140, 40, 25, "servo1")
ButtonGadget(#sharp, 210,140, 40, 25, "sharp")
ButtonGadget(#ton, 255,140, 40, 25, "ton")

pi = ACos(0)*2

Repeat  
  Event = WaitWindowEvent()
  
  If Event = #PB_Event_Timer And EventTimer() = 123
    SetGadgetText(#Editor_0, text_e)
    Buffer = ReceiveHTTPMemory(url)
    If buffer  
      str_1=Str(PeekC(Buffer))
      zahl=Val(str_1)
      If zahl < 0
        zahl=128-zahl
      EndIf
      str_1=Str(zahl)
      text_e + str_1 +Chr(10)
      SetGadgetText(#Editor_0, text_e) 
      FreeMemory(Buffer)
      
      winkel=winkel+wd
      If winkel > 180
        TEST=0
      EndIf       
    EndIf
    URL = SetURLPart(URL, "pin", "leer")
  EndIf   
  
  If Event = #PB_Event_Gadget 
    StartDrawing(CanvasOutput(#canv))
      If TEST=1
        x1 = Sin(winkel/180*pi) * zahl
        y1 = Cos(winkel/180*pi) * zahl
        LineXY(200,200,200+x1,200+y1,RGB(255,0,0))
      EndIf 
      If TEST=2
        x1 = Sin((winkel+180)/180*pi) * zahl
        y1 = Cos((winkel+180)/180*pi) * zahl
        LineXY(200,200,200+x1,200+y1,RGB(0,255,0))
      EndIf
      If TEST=3
        Box(0,0,399,399,RGB(255,255,255))
      EndIf  
    StopDrawing() 
  EndIf
    
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      
      If EventGadget =  #vor
        URL = SetURLPart(URL, "pin", "vor")      
      EndIf
      
      If EventGadget =  #zur
        URL = SetURLPart(URL, "pin", "zur")     
      EndIf
      
      If EventGadget =  #links
        URL = SetURLPart(URL, "pin", "links")       
      EndIf
      
      If EventGadget =  #hlinks
        URL = SetURLPart(URL, "pin", "hlinks")      
      EndIf
      
      If EventGadget =  #rechts
        URL = SetURLPart(URL, "pin", "rechts")      
      EndIf
      
      If EventGadget =  #hrechts
        URL = SetURLPart(URL, "pin", "hrechts")        
      EndIf
      
      If EventGadget =  #mitte
        URL = SetURLPart(URL, "pin", "mitte")       
      EndIf
      
      If EventGadget =  #v0
        URL = SetURLPart(URL, "pin", "v0")       
      EndIf
      
      If EventGadget =  #v1
        URL = SetURLPart(URL, "pin", "v1")       
      EndIf
      
      If EventGadget =  #v2
        URL = SetURLPart(URL, "pin", "v2")       
      EndIf
      
      If EventGadget =  #servo0
        URL = SetURLPart(URL, "pin", "ser0")       
      EndIf
      
      If EventGadget =  #servo1
        URL = SetURLPart(URL, "pin", "ser1")  
        TEST=1
        winkel=0
        wd=2
      EndIf
      
      If EventGadget =  #sharp
        URL = SetURLPart(URL, "pin", "sharp") 
        TEST=2
        winkel=0
        wd=1.8
      EndIf
      
      If EventGadget =  #ton
        URL = SetURLPart(URL, "pin", "ton")      
      EndIf
      
      If EventGadget =  #cls
        text_e=""
        SetGadgetText(#Editor_0, text_e)
        TEST=3
      EndIf
      
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect 
ForEver

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 03.04.2016 19:23
von STARGÅTE
Ich probiere es einfach noch mal:
  • Code: Alles auswählen

    Buffer = ReceiveHTTPMemory(url)
    Diese Funktion gibt eine Speicheradresse (Pointer) zurück, das heißt, du musst/solltest hier *Buffer überall in deinem Code nutzen oder zumindest Buffer als .i (Integer) definieren und nicht .l (Long)
  • InitNetwork() prüft keine Netzwerkverbindung sondern initialisiert nur die Funktionen für Netzwerk und prüft ggf nur ob es überhaupt eine Netzwerkkarte gibt.
  • Code: Alles auswählen

    pi = ACos(0)*2
    Ausgefallene Definition, allerdings gibt es die Konstante #PI bereits
Wo stürzt denn dein Code ab, in welcher Zeile, an welchem Codesegment?

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 03.04.2016 21:53
von funkheld
Es wird dann mal Zeit , das es ein Befehl gibt der auch eine Verbindung überwacht.

-----------------------
Wo stürzt denn dein Code ab, in welcher Zeile, an welchem Codesegment?
----------------------- :lol: :lol: :lol: :lol: :lol: :lol:

Gruss

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 03.04.2016 22:07
von jear
Willst Du Hilfe oder die Helfer anmachen?

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 04.04.2016 09:50
von NicTheQuick
@funkheld: Die fällst hier zu häufig auf um dich so arrogant anzustellen. Wenn du Fragen nur aus Spaß fragst, dann kann ich deine Threads ja auch gleich in den Mülleimer verschieben.
lieferheld hat geschrieben:Es wird dann mal Zeit , das es ein Befehl gibt der auch eine Verbindung überwacht.
Und wie soll deiner Meinung nach solch ein Befehl aussehen? Entweder es gibt ein Timeout oder es kommt das entsprechende Event. Kritisieren kann jeder, gib lieber mal was konstruktives von dir.

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 04.04.2016 14:43
von funkheld
Auf diesen Befehl kann man gänzlich verzichten:
InitNetwork()
Der so überflüssig wie ein Kropf, wenn man seine Tätigkeit sieht.

Gruss

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 04.04.2016 14:54
von mhs
Naja, wenn du meinst...

Mit InitNetwork() wird z.B. unter Windows die WinSocket Schnittstelle eingebunden, ohne die keine der Netzwerkfunktionen möglich wäre. Außerdem scheitert die Intialisierung, wenn keine Netzwerkkarte verbaut ist, etc.

Natürlich könnte auch jede Netzwerkfunktion überprüfen, ob das Netzwerk initialisiert wurde und dies selbst erledigen, aber das ist eine konzeptionelle Sache, wo auch die aktuelle Implementierung seine Vorteile hat.

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 04.04.2016 23:33
von funkheld
Na, wenn ich Netzwerk betreibe , brauche ich keine Überwachung ob die Netzwerkkarte eingebaut ist.
Wenn ich keine Netzwerkkarte habe , benutze ich auch nicht "InitNetwork()".

Wird der Benutzer hier für blöd gehalten?

Ich brauche eine Überwachung, ob die Verbindung hergestellt werden kann, wenn nein, soll das Programm sauber aussteigen.
"InitNetwork()". soll einbinden und überwachen.
Aus die Maus.

Gruss

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 05.04.2016 07:45
von mhs
Du weisst also genau, dass jeder PC auf dem dein Programm installiert wird auch eine Netzwerkkarte hat, wenn du es 1000 mal verkaufst?

Und es geht ja primär auch nicht um die Abfrage der Netzwerkkarte, sondern um die Vorbereitung und Bereitstellung der Socketschnittstelle.

Um auf dein Problem zurückzukommen, ReceiveHTTPMemory hat ein Timeout, wenn eine URL nicht erreichbar ist, da es aber sehr lange ist, hängt dein Programm quasi. Das wird durch den Timer noch zusätzlich begünstigt, weil in der EventQueue in der Zeit des Timeouts neue Timer Events einlaufen (sieht man in meinem Beispiel mit den Debugausgaben) und dein Programm so von einem Timeout zum nächsten Timeout kommt. Das ist also einfach falsch programmiert. Eine Möglichkeit wäre, das ReceiveHTTPMemory in einen Thread auszulagern und mit einer Queue/Stack zu arbeiten oder alternativ den asynchronen Modus von ReceiveHTTPMemory zu nutzen. In beiden Fällen gibt es keine Verzögerung.

Zum Beispiel so:

Code: Alles auswählen

EnableExplicit

Global.i httpRequest
Global *Buffer

Global TEST.l,itest.l
Global text_e.s, url.s, str_1.s
Global zahl.a
Global pi.f,winkel.f,x1.f,y1.f,wd.f

Enumeration
  #Window_0
  #Editor_0
  #vor
  #zur
  #links
  #rechts
  #mitte
  #cls
  #v0
  #v1
  #v2
  #hlinks
  #hrechts
  #servo0
  #servo1
  #sharp
  #ton
  #canv
EndEnumeration

If InitNetwork() = 0
  MessageRequester("Error", "Kein Netzwerk !", 0)
  End
EndIf
 
url= "http://192.168.2.101/?pin=vor"

OpenWindow(#Window_0,500,200,900,550,"esp-webserver-http", #PB_Window_SystemMenu)
CanvasGadget(#canv, 380, 20, 400, 400)

AddWindowTimer(#Window_0, 123, 400)

EditorGadget(#Editor_0, 10, 200, 280,300)

ButtonGadget(#vor, 120,20, 40, 25, "vor")
ButtonGadget(#zur, 120,80, 40, 25, "zurück")
ButtonGadget(#mitte, 120,50, 40, 25, "mitte")
ButtonGadget(#hlinks, 75,50, 40, 25, "hlinks")
ButtonGadget(#links, 30,50, 40, 25, "links")
ButtonGadget(#rechts, 210,50, 40, 25, "rechts")
ButtonGadget(#hrechts, 165,50, 40, 25, "hrechts")
ButtonGadget(#cls, 310,200, 40, 25, "cls")
ButtonGadget(#v0, 310,20, 40, 25, "v0")
ButtonGadget(#v1, 310,50, 40, 25, "v1")
ButtonGadget(#v2, 310,80, 40, 25, "v2")
ButtonGadget(#servo0, 120,140, 40, 25, "servo0")
ButtonGadget(#servo1, 165,140, 40, 25, "servo1")
ButtonGadget(#sharp, 210,140, 40, 25, "sharp")
ButtonGadget(#ton, 255,140, 40, 25, "ton")

pi = ACos(0)*2

Define.i Event, EventGadget, EventType, EventWindow

Repeat 
  Event = WaitWindowEvent()
 
  If Event = #PB_Event_Timer And EventTimer() = 123
    SetGadgetText(#Editor_0, text_e)

    Debug "TimerEvent"
  
    If httpRequest
    
      Select HTTPProgress(httpRequest)
      
        Case #PB_Http_Success
          Debug "Success"
          *Buffer = FinishHTTP(httpRequest)
          httpRequest = 0
          
        Case #PB_Http_Failed
          Debug "Failed"
          httpRequest = 0

      EndSelect

    Else
      Debug "ReceiveHTTPMemory"
      httpRequest = ReceiveHTTPMemory(url, #PB_HTTP_Asynchronous)
      URL = SetURLPart(URL, "pin", "leer")
    EndIf

    If *Buffer 
      str_1=Str(PeekC(*Buffer))
      zahl=Val(str_1)
      If zahl < 0
        zahl=128-zahl
      EndIf
      str_1=Str(zahl)
      text_e + str_1 +Chr(10)
      SetGadgetText(#Editor_0, text_e)
      FreeMemory(*Buffer)
      *Buffer = #Null

      winkel=winkel+wd
      If winkel > 180
        TEST=0
      EndIf       
    EndIf
    
  EndIf   
 
  If Event = #PB_Event_Gadget
    StartDrawing(CanvasOutput(#canv))
      If TEST=1
        x1 = Sin(winkel/180*pi) * zahl
        y1 = Cos(winkel/180*pi) * zahl
        LineXY(200,200,200+x1,200+y1,RGB(255,0,0))
      EndIf
      If TEST=2
        x1 = Sin((winkel+180)/180*pi) * zahl
        y1 = Cos((winkel+180)/180*pi) * zahl
        LineXY(200,200,200+x1,200+y1,RGB(0,255,0))
      EndIf
      If TEST=3
        Box(0,0,399,399,RGB(255,255,255))
      EndIf 
    StopDrawing()
  EndIf
   
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
     
      If EventGadget =  #vor
        URL = SetURLPart(URL, "pin", "vor")     
      EndIf
     
      If EventGadget =  #zur
        URL = SetURLPart(URL, "pin", "zur")     
      EndIf
     
      If EventGadget =  #links
        URL = SetURLPart(URL, "pin", "links")       
      EndIf
     
      If EventGadget =  #hlinks
        URL = SetURLPart(URL, "pin", "hlinks")     
      EndIf
     
      If EventGadget =  #rechts
        URL = SetURLPart(URL, "pin", "rechts")     
      EndIf
     
      If EventGadget =  #hrechts
        URL = SetURLPart(URL, "pin", "hrechts")       
      EndIf
     
      If EventGadget =  #mitte
        URL = SetURLPart(URL, "pin", "mitte")       
      EndIf
     
      If EventGadget =  #v0
        URL = SetURLPart(URL, "pin", "v0")       
      EndIf
     
      If EventGadget =  #v1
        URL = SetURLPart(URL, "pin", "v1")       
      EndIf
     
      If EventGadget =  #v2
        URL = SetURLPart(URL, "pin", "v2")       
      EndIf
     
      If EventGadget =  #servo0
        URL = SetURLPart(URL, "pin", "ser0")       
      EndIf
     
      If EventGadget =  #servo1
        URL = SetURLPart(URL, "pin", "ser1") 
        TEST=1
        winkel=0
        wd=2
      EndIf
     
      If EventGadget =  #sharp
        URL = SetURLPart(URL, "pin", "sharp")
        TEST=2
        winkel=0
        wd=1.8
      EndIf
     
      If EventGadget =  #ton
        URL = SetURLPart(URL, "pin", "ton")     
      EndIf
     
      If EventGadget =  #cls
        text_e=""
        SetGadgetText(#Editor_0, text_e)
        TEST=3
      EndIf
     
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver

Re: Netzwerkverbindung abfragen funktioniert nicht.

Verfasst: 05.04.2016 15:09
von ts-soft
funkheld hat geschrieben:Wird der Benutzer hier für blöd gehalten?
In diesem speziellen Falle, eindeutig JA! :mrgreen: