Seite 1 von 1

TCP-Server / Automatische Zeilenumbrüche

Verfasst: 08.09.2007 11:50
von Nefti
Hallo!

ich bin ein absoluter PB neuling, also bitte nicht über meine dummen fragen wundern.

Folgendes Problem:
Ich möchte einen TCP-Server programmieren, der auf einem gewissen port daten (plaintext) empfängt und diese nach beendigung der clientverbindung in eine textdatei schreibt.
Soweit hab ichs schon geschafft, jetzt ist nur das problem, dass er zwar die 1. zeiel normal liest, wenn ich jedoch im telnet <return> drücke und die 2. zeile eingeben, macht er mir nach jedem zeichen einen zeilenumbruch.

Telnet-Eingabe:

Code: Alles auswählen

daten 1
daten 2
Die Ausgabe in der Textdatei sieht folgendermaßen aus:

Code: Alles auswählen

daten 1
d
a
t
e
n
 
2
Das ist der Code:

Code: Alles auswählen

If CreateNetworkServer(0, Port)

  line.s = ""
  
  Repeat
      
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
  
      Select SEvent
        
        Case 2
            ReceiveNetworkData(ClientID, Buffer, 1000)
            line = line+PeekS(Buffer) 
            
        Case 4
          AppendFile(logfile,line)				;eingelesenen text an logdatei anhängen
          line = ""
    
      EndSelect
    EndIf
    
    Select WindowEvent()									;abfrage, ob irgendein fenster-ereignis aufgetreten ist
		  Case #PB_Event_CloseWindow								;fenster schließen wurde angeklickt
		    Break														;"endlos" schleife verlassen
		  Case #PB_Event_SysTray									;ein ereignis beim systray icon ist aufgetreten
		    If EventType()=#PB_EventType_LeftDoubleClick	;wenn es ein doppelklick war, dann
		      If minimized=1										;fenster ist versteckt
		        HideWindow(0,0)								;also normalisieren
		        minimized=0										;und wir merken uns, daß es NICHT mehr versteckt ist
		      Else													;fenster normal
		        HideWindow(0,1)								;also verstecken
		        minimized=1										;und wir merken uns, daß es jetzt versteckt ist
		      EndIf
		    EndIf
		  Default														;wenn nix los ist
		    Delay(1)													;1 ms pause machen, damit das programm cpu schonend läuft :)
		EndSelect
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
Meine Frage:
Warum diese Zeilenumbrüche und was kann ich dagegen tun?
Es eei zu erwähnen, dass zeilenumbrüche, welche vom Client "in auftrag gegeben" worden sind sehrwohl als solche in der textdatei landen sollten.

Gewünschtes Ergebnis:

Code: Alles auswählen

daten 1
daten 2

Verfasst: 08.09.2007 17:21
von mk-soft

Code: Alles auswählen

If CreateNetworkServer(0, Port)

  line.s = ""
  *buffer = AllocateMemory($4000)
  
  Repeat
     
    SEvent = NetworkServerEvent()
 
    If SEvent
   
      ClientID = EventClient()
 
      Select SEvent
       
        Case 2
            len = ReceiveNetworkData(ClientID, *Buffer, $4000)
            line + PeekS(*Buffer, len)
           
        Case 4
          AppendFile(logfile,line)            ;eingelesenen text an logdatei anhängen
          line = ""
   
      EndSelect
    EndIf
   
    Select WindowEvent()                           ;abfrage, ob irgendein fenster-ereignis aufgetreten ist
        Case #PB_Event_CloseWindow                        ;fenster schließen wurde angeklickt
          Break                                          ;"endlos" schleife verlassen
        Case #PB_Event_SysTray                           ;ein ereignis beim systray icon ist aufgetreten
          If EventType()=#PB_EventType_LeftDoubleClick   ;wenn es ein doppelklick war, dann
            If minimized=1                              ;fenster ist versteckt
              HideWindow(0,0)                        ;also normalisieren
              minimized=0                              ;und wir merken uns, daß es NICHT mehr versteckt ist
            Else                                       ;fenster normal
              HideWindow(0,1)                        ;also verstecken
              minimized=1                              ;und wir merken uns, daß es jetzt versteckt ist
            EndIf
          EndIf
        Default                                          ;wenn nix los ist
          Delay(1)                                       ;1 ms pause machen, damit das programm cpu schonend läuft :)
      EndSelect
   
  Until Quit = 1
  
  FreeMemory(*buffer)
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
 
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
Müsste so gehen.

FF :wink:

Verfasst: 08.09.2007 23:05
von Nefti
ok, danke, funzt.

aber warum? ^^
kannst du mir evtl. meinen fehler erläutern?