Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten ab.

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten ab.

Beitrag von funkheld »

Hallo, guten Tag.
Von einem Serverprogramm 127.0.0.1 und Port 5410 werden Daten gesendet, die ich auch empfangen kann mit meinem Client.

Aber nach ca 2 Minuten Schaltet der Server ab.
Wenn ich aber das Telnetprogramm "PuTTy" starte und verwende zum Server, dann passiert das nicht.

Es muss irgendwie an meinem Purebasicprogramm liegen.
Schaltet der Neztwerkcode irgendwie Zeitlich selber ab von Purebasic?

Danke.
Gruss

Code: Alles auswählen

Global Quit.l, Port.l, conID.l, status.l, cEvent.l, Result.l, test.l, EventID.l
Global text_e.s,

DataBuffer = AllocateMemory(128)
test=1

If OpenWindow(0, 10, 10, 800, 500, "Client ", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  
  ButtonGadget(1,5, 10,100, 20, "Ende")
  ButtonGadget(2,120, 10, 100, 20, "Connect")
  ButtonGadget(3,235, 10, 140, 20, "Disconnect")
  EditorGadget(4, 10, 60, 600, 400)
  ButtonGadget(5,620,60, 80, 25, "Cls Edit")
  
  Quit = 0
  Port = 5410
  status = 0
  
  InitNetwork()
  
  Repeat  
    EventID = WindowEvent() 
    
    Select EventID
      Case #PB_Event_CloseWindow
        Quit = 1
        
      Case #PB_Event_Gadget 
        Select EventGadget()    
          Case 1            
            Quit = 1
            
          Case 2        
            If Not status
              conID = OpenNetworkConnection("127.0.0.1", Port)
              If conID
                status = 1
                SetGadgetText(4, GetGadgetText(4) + #CR$ + "- Connected -" + #CR$)
              EndIf
            EndIf
            
          Case 3
            If status <> 0
              CloseNetworkConnection(conID)
              status = 0
              SetGadgetText(4, GetGadgetText(4) + #CR$ + "- Connection closed -" + #CR$)
            EndIf
            
          Case 5
            text_e=""
            SetGadgetText(4, text_e)          
        EndSelect
    EndSelect
    
    If status   
      cEvent = NetworkClientEvent(conID)
      
      Select cEvent      
        Case #PB_NetworkEvent_Data     
          Result = ReceiveNetworkData(ConID, DataBuffer, 1) 
          
          If PeekS(DataBuffer)=">" And test=1
            SendNetworkString(ConID, "1"+Chr(13))
            test=0
          Else 
            SetGadgetText(4, GetGadgetText(4) + PeekS(DataBuffer, Result,#PB_Ascii))
          EndIf      
      EndSelect
      
    EndIf
    
  Until Quit = 1 Or EventID = #PB_Event_CloseWindow
EndIf
FreeMemory(DataBuffer)
End

Bei diesem Consolenprogramm passiert das auch nach 2 Minuten :

Code: Alles auswählen

Global Quit.l, mem.l, test.l, wert.l, size.l

test=1
mem = AllocateMemory(128)

OpenConsole()

If InitNetwork()
  ip$ = "127.0.0.1"
  ConnectionID.l = OpenNetworkConnection(ip$, 5410)
  
  If ConnectionID = 0
    PrintN("Fehler beim Verbindungsaufbau mit " + ip$)
    Input()
    End
  EndIf
   
  Repeat      
    If NetworkClientEvent(ConnectionID)
      size = ReceiveNetworkData(ConnectionID, mem, 1)
      
      If size > 0
        If PeekS(mem)=">" And test=1
          SendNetworkString(ConnectionID, "1"+Chr(10)+Chr(13))
          test=0
        Else 
          Print(PeekS(mem,1)) 
        EndIf 
      EndIf  
    EndIf  
  Until LCase(input$) = "quit"
  
  Quit = 1
  CloseNetworkConnection(ConnectionID)
EndIf

FreeMemory(mem)
End
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von Micha122 »

Hallo,
Deine Angaben sind aber wirklich sehr mäßig. :cry:

Was für ein Server/Protokoll ist das? Http?

Wie sieht der Antwort Header des Servers aus?

Falls Http: Du sendest keinen validen Http Header.

Grüße
Barcodes for PureBasic - http://micha122.bplaced.net/
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von uweb »

Ich komme nur selten dazu mich mit PB zu beschaftigen - Bin also auch nicht so fit.
Da über den Server nichts bekannt ist kann ich nur raten.
http://www.purebasic.fr/english/viewtop ... it=TimeOut
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von mk-soft »

Welche OS?

Ausserdem bin ich kein fan von WindowEvent(). Verbrennt nur CPU Power. Besser ist immer WaitWindowEvent().
Alles was mit NetWork zu tun hat in einen Thread auslagern und aus diesen die empfangende Daten an die GUI senden.

Hinweis
Die Funktion SetGadgetText funktioniert nur bei Windows auch aus einem Thread, aber nicht bei Linux und Mac.
Um aus Threads Daten an die GUI Daten zu aktualisieren ist es besser über PostEvent zu arbeiten.
Dafür die es folgendes Module: http://www.purebasic.fr/english/viewtop ... 12&t=66180
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von funkheld »

Hallo, guten Tag.
Es ist ein Telnet-Protokoll.

Gibt es bitte in Purebasic irgendein Programm, welches Telneteigenschaften hat ?
Wenn ich Tera Term nehme muss ich dort auf Telnet umstellen.

Danke.
Gruss
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von GlassJoe »

funkheld hat geschrieben: .....
Aber nach ca 2 Minuten Schaltet der Server ab.
Wenn ich aber das Telnetprogramm "PuTTy" starte und verwende zum Server, dann passiert das nicht.
......
Also von einem Programm der als Server fungiert, werden Daten an deinen PB Client gesendet, der sie auch empfängt.

Und nach 2 Min Schaltet der Server ab ? Und wenn du Putty als Server verwendest um an deinen PB Client zu senden, schaltet sich Putty nicht ab ?

Wenn ja, hat das ziehmlich warscheinlich nicht mit PB selbst zu tun, schau mal was passiert wenn du in 10 Sek abständen
irgendwas an den Server über deinen PB Client sendest.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von funkheld »

Danke für die Info.

Auch nach dem Regelmäßigen senden schaltet er ab.
Ich vermute, das eine Telnetverschickung von Daten ein anderes Format hat wie normal einfach nur Daten senden.

Ich suche ein Program mit Purebasic was Telnetcharacter hat.
Habe aber noch keins gefunden und ich weiß auch nicht, wie ich es selber anpacken kann.

Danke.
Gruss
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von GlassJoe »

funkheld hat geschrieben:Danke für die Info.

Auch nach dem Regelmäßigen senden schaltet er ab.
Ich vermute, das eine Telnetverschickung von Daten ein anderes Format hat wie normal einfach nur Daten senden.

Ich suche ein Program mit Purebasic was Telnetcharacter hat.
Habe aber noch keins gefunden und ich weiß auch nicht, wie ich es selber anpacken kann.

Danke.
Gruss
Ich hab leider auch keine Ahnung von Telnet, aber Curl unterstützt Telnet, und wenn
ich mich nicht täusche gibt es eine curl.dll die mann auch über PB nutzen kann.

https://de.wikipedia.org/wiki/CURL

vl hilft dir das zu verstehen

http://de.ccm.net/contents/31-das-telnet-protokoll

wo der Fehler ist (ich schätze opennetworkconnection kann mit allem umgehen, solange der nötige Protokoll Header richtig spezifiziert ist)

EDIT: Hast du geschaut was empfangen wird ? Also eine Debug Data ausgewertet ?

OpenNetworkConnection bewirkt ja nur das öffnen einer Verbindung, und das Bytes dann gesendet und empfangen werden, aber wenn du keinen korrekten Protokoll Header Sendest, dann sendet der Telnet
Server dir vl trotzdem Daten zurück, unzwar das es die Anfrage nicht verstanden hat.

Und so denkst du das es eigentlich klappt was es nicht tut , und das dein Problem ist, daß sich der Server nach 2 Minuten abschaltet, was dann vl auch kein Wunder ist, denn es wartet 2 Minuten
auf eine richtige Anfrage, oder aber es sendet / versucht es, und nach 2 Minuten gibt der auf und die Connection wird beendet.

Wenn du den Header richtig spezifizierst, dürfte es klappen.

Ich musste das damals bei http, es gab keinen vernünfigen http befehl (mit dem mann den Empfangs Heaer auswerten konnte) damals, also musste ich opennetwork connection benutzen, und dachte ja das ist einfach das richtige für http, aber ohne Header Daten die mann absendet, ist der Befehl für nichts geeignett, mit den richtigen Daten wieder für alles geeignett (ausser vl für ssl)
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von funkheld »

OpenNetworkConnection bewirkt ja nur das öffnen einer Verbindung, und das Bytes dann gesendet und empfangen werden, aber wenn du keinen korrekten Protokoll Header Sendest, dann sendet der Telnet
Server dir vl trotzdem Daten zurück, unzwar das es die Anfrage nicht verstanden hat.
Das mit dem Protokoll Header wird es sein.
Wenn ich "Tera Term" nehme und auf TCP/IP setze und den Dienst dort mit Telnet angebe wird sofort die Verbindung zum Server hergestellt und kann damit arbeiten . Da man mit dem anderen Programm mehrere Server aktivieren kann, wartet er nur auf eine Zahl die ich bei Tera Term eingebe und schon geht es los. Wenn dort nur 1 Server bereit steht für 127.0.0.1 gebe ich bei Tera Term 1 ein , drücke Return und schon läuft es.

Danke.
Gruss
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Serverprog vom Kerbalprogramm schaltet nach ca 2 Minuten

Beitrag von funkheld »

Wer kann mir bitte die beiden Fragen unten beantworten ?
Wenn dieses regelmäßig gesendet wird, bleibt der Server erhalten :
SendNetworkString(ConID, " "+Chr(10))

Danke.
Gruss

Code: Alles auswählen

Global Quit.l, Port.l, conID.l, status.l, cEvent.l, Result.l, test.l, EventID.l,test.l
Global text_e.s,

DataBuffer = AllocateMemory(128)
test=1

If OpenWindow(0, 10, 10, 800, 500, "Client ", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  
  ButtonGadget(1,5, 10,100, 20, "Ende")
  ButtonGadget(2,120, 10, 100, 20, "Connect")
  ButtonGadget(3,235, 10, 140, 20, "Disconnect")
  EditorGadget(4, 10, 60, 600, 400)
  ButtonGadget(5,620,60, 80, 25, "Cls Edit")
  ButtonGadget(6,620,90, 80, 25, "1")
  ButtonGadget(7,620,120, 80, 25, "stage")
  
  Quit = 0
  Port = 5410
  status = 0
  
  InitNetwork()
  
  Repeat  
    EventID =  WaitWindowEvent(5)
    
    Select EventID
      Case #PB_Event_CloseWindow
        Quit = 1
        
      Case #PB_Event_Gadget 
        Select EventGadget()    
          Case 1            
            Quit = 1
            
          Case 2        
            If Not status
              conID = OpenNetworkConnection("127.0.0.1", Port,#PB_Network_TCP,2000)
              If conID
                status = 1
                SetGadgetText(4, GetGadgetText(4) + #CR$ + "- Connected -" + #CR$)
              EndIf
            EndIf
            
          Case 3
            If status <> 0
              CloseNetworkConnection(conID)
              status = 0
              SetGadgetText(4, GetGadgetText(4) + #CR$ + "- Connection closed -" + #CR$)
            EndIf
            
          Case 5
            text_e=""
            SetGadgetText(4, text_e) 
            
          Case 6
            test=6
            
          Case 7
            test=7      
        EndSelect
    EndSelect
    
    If status   
      cEvent = NetworkClientEvent(conID)
      
      Select cEvent      
        Case #PB_NetworkEvent_Data     
          Result = ReceiveNetworkData(ConID, DataBuffer, 1) 
          SetGadgetText(4, GetGadgetText(4) + PeekS(DataBuffer, Result,#PB_Ascii))
      EndSelect
      
    EndIf
    
  Until Quit = 1 Or EventID = #PB_Event_CloseWindow
EndIf
FreeMemory(DataBuffer)
End

Wo kann ich bitte die Abfrage test=6 und test=7 reinsetzen?

Code: Alles auswählen

If test=6
  SendNetworkString(ConID, "1"+Chr(10))
  test=0
EndIf 
          
if test=7
  SendNetworkString(ConID, "stage."+Chr(10)) 
  test=0
EndIf 
Und dieses darf bitte nur alle 500ms gesendet werden. Wo kommt das bitte rein ?

Code: Alles auswählen

SendNetworkString(ConID, " "+Chr(10))
Antworten