Seite 1 von 1

Telnet

Verfasst: 05.04.2006 15:58
von kaitec
Ich hab hier en kleines Problem... der Server soll später von Telnet gesteuert werden, jetzt hab ich nur das Problem mit dem emfangen der Telnet eingaben!

Wir ihr mit helfen könntet wäre des echt klasse!

MfG

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6000
Buffer.s = ""

If CreateNetworkServer(Port)

  MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
  
  Repeat
    Buffer.s = ""  
    SEvent = NetworkServerEvent()
    
    If SEvent
    
      ClientID = NetworkClientID()
  
      Select SEvent
      
        Case 1
          ;MessageRequester("PureBasic - Server", "A new client has connected !", 0)
          SendNetworkString(ClientID, "Helo to the dangerdexx Server"+Chr(10)+Chr(13))
  
        Case 2
          Repeat 
          ReceiveNetworkData(ClientID, Buffer.s, 1000)
          Buffer.s = RTrim(Buffer.s)
          x = x + 1
          Buffer.s = LSet(Buffer.s, x, Buffer.s) ; Ergebnis$ ergibt: "L-------"
          Until Buffer.s = Chr(10) 
          x = 0
          MessageRequester("", Buffer.s, 0)
   
  
        ;Case 3
        ;  MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
        ;  ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
  
        Case 4
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
          Quit = 1
    
      EndSelect
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer()
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

  
End   


Verfasst: 05.04.2006 16:04
von MVXA
Wie wäre es, wenn du die empfangenen Daten in einem Buffer
speicherst und erst den Buffer auswertest, wenn du ein #CRLF
empfängst?

Verfasst: 05.04.2006 16:16
von kaitec
Aber wie setz ich immer eines Zeichen nach dem anderen in einen String??

Verfasst: 05.04.2006 16:33
von kaitec
ICh bekomm das irgendwie einfach nicht hin, dass der Server die einzelen Zeichen speichert und nach dem drücken von ENTER die einzelen Zeichen zusammen setzt und als Befehl erkennt.. und Telnet dann eine rückmeldung schickt....

Verfasst: 05.04.2006 18:58
von Laurin
kaitec hat geschrieben:Aber wie setz ich immer eines Zeichen nach dem anderen in einen String??

Code: Alles auswählen

String.s = ""
String = "AB"
String = String + "C"
String + "D"

Debug String
kaitec hat geschrieben:ICh bekomm das irgendwie einfach nicht hin, dass der Server die einzelen Zeichen speichert und nach dem drücken von ENTER die einzelen Zeichen zusammen setzt und als Befehl erkennt.. und Telnet dann eine rückmeldung schickt....
Beschäftige dich mal mit den Befehlen und das Drumherum von AllocateMemory(), ReceiveNetworkData() und SendNetworkData(). Eine Suche im Forum dürfte dir auch sehr weiterhelfen.


Ich hoffe, ich habe zur allgemeinen Unkenntnis beigetragen ^^

Verfasst: 06.04.2006 16:11
von kaitec
Der Code funzt net! Ich habe das jetzt hin bekommen mit dem emfangen von ENTER:

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6000
Buffer.s = ""

If CreateNetworkServer(Port)

  MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
  
  Repeat
    Delay(2)
    
    Buffer.s = ""  
    SEvent = NetworkServerEvent()
    
    If SEvent
    
      ClientID = NetworkClientID()
  
      Select SEvent
      
        Case 1
          ;MessageRequester("PureBasic - Server", "A new client has connected !", 0)
          SendNetworkString(ClientID, "Helo to the dangerdexx Server"+Chr(10)+Chr(13))
  
        Case 2
          ein.s = ""
          [B]jjj.s = Chr(13)+Chr(10)[/B]
          Repeat 
          ReceiveNetworkData(ClientID, Buffer.s, 1000)
          ein.s + Buffer.s
          If Buffer.s = jjj.s
          qu = 1
           MessageRequester("", "GESENDET ENTER!"+Chr(10)+Chr(13), 0)
          EndIf 
          x = x + 1
          Until qu = 1
          qu = 0 
          x = 0
          MessageRequester("", ein.s, 0)
   
  
        ;Case 3
        ;  MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
        ;  ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
  
        Case 4
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
          Quit = 1
    
      EndSelect
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer()
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

  
End
Das Problem ist nur noch mit dem zusammen setzen der Stings... er kann den Buffer nicht zu einem angegebenen String speichern, da komm immer nur wirre Zeichen raus!

Verfasst: 06.04.2006 16:57
von Laurin
kaitec hat geschrieben:da komm immer nur wirre Zeichen raus!
Hast du dir das telnet-Protokoll mal angeschaut? Logisch, dass da ein paar "wirre" Zeichen sind.

Verfasst: 06.04.2006 17:36
von bobobo
Nimm Dir doch einfach nochmal das Beispiel aus der mitgelieferten PB-Hilfe oder den mit PB ausgelieferten Code des NetworkServers vor.

Sieh Dir dort mal den Buffer an und wie das dort umgesetzt ist.

Anpassen an Deine Bedürfnisse sollte dann eigentlich nicht so schwer sein.

Wenn Du Dich zu iesem Server mit einem Telnet-Programm (putty ist
nett) verbindest Kannst Du auch annähernd anständig damit kommu-nizieren wenn Du die Daten serverseitig wie folgt ausgibst

Code: Alles auswählen

...
...
Case 2
    MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
    ReceiveNetworkData(ClientID, Buffer, 1000)
    MessageRequester("Info", "String: "+StringField(PeekS(Buffer),1,#CRLF$), 0)
...
...