Seite 1 von 2

ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 02:44
von Ironsmurf
Hallo
ich versuche nun schon länger den Wert von ReceiveNetworkData in einen String zu übergeben, aber irgenwie bekomme ich das nicht hin, für einen Tip wäre ich sehr dankbar. Denn Code habe ich hier im Forum entnommen.Bin Anfänger und beschäftige mich noch nicht so lange mit Server und Client.

Code: Alles auswählen

ip$ = "192.168.0.101"

OpenConsole()                                 
ConsoleTitle ("Mister Regie")
ConsoleColor(13,0)
;ConsoleLocate (13,12)                         
;Print ("Bitte gib deinen Chatnamen ein: ")         
Name$="Mister Regie"                        
   
ClearConsole()
;PrintN("Willkommen in Thirds Chat")
InitNetwork()
PrintN ("Verbindung zum Netzwerk hergestellt")
ClientConnectionID = OpenNetworkConnection(ip$,6784)
If ClientConnectionID=0
  ConsoleColor(12,0)
  PrintN("Server Offline,Verbindung zum Server nicht hergestellt")
  Input()
Else
  ;PrintN("Server Online,Verbindung zum Server hergestellt")
   *TCPBuffer = AllocateMemory(1024)
  Repeat
    Select NetworkClientEvent(ClientConnectionID)
      Case 2
        TCPBufferLength = ReceiveNetworkData(ClientConnectionID, *TCPBuffer, 1024)
        PrintN(""+PeekS(*TCPBuffer,TCPBufferLength)) ; hier wird der empfangene Text angezeigt im Programm, wie bekomme ihn den Text in einen String$
    EndSelect
    Inkey$ = Inkey()
    Inkey = Asc(Inkey$)
    Select Inkey
      Case 0
        ;nix machen
      Case 13
        PrintN ("")
        If Nachricht$ <> "quit"
          SendNetworkString(ClientConnectionID, Name$ +" : "+Nachricht$)
          Nachricht$ = ""
        Else
          quit = 1
        EndIf
      Default
        key$ = Left(Inkey$,1)
        Nachricht$ + key$
        Print(key$)
    EndSelect

    Delay(10)
  Until quit
   
  FreeMemory(*TCPBuffer)
EndIf
 
CloseConsole()
End

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 02:55
von TomS

Code: Alles auswählen

string$ = PeekS(*TCPBuffer,TCPBufferLength)
PrintN(string$)

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 02:55
von STARGÅTE
Im Prinzip steht die Lösung doch schon dar ...
PrintN(""+PeekS(*TCPBuffer,TCPBufferLength))

Genau die Funktion PeekS() ließt aus dem Buffer (*TCPBuffer) eine zeichenkette aus und gibt diese zurück.
Statt diese gleich anzuzeigen kannst du sie auch in einem String speichern:
String$ = PeekS(*TCPBuffer,TCPBufferLength)

Später kannst du den dann einfach verwenden:
PrintN(String$)

Info: Du musst nicht den ganzen Text fett schreiben, man kann ihn auch so lesen. Mehr aufmerksamkeit erhälst du dadurch auch nicht /:->

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 03:14
von Ironsmurf
Sorry, war keine Absicht mit der Fettschrift.

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 03:23
von Ironsmurf
Haben eben Deinen Tip probiert, leider bekomme ich eine Fehlermeldung
"Kann keinen numerischen Wert in eine String-Variable schreiben"
Habe versucht mit STR den String umzuwandeln, hat leider nicht geklappt.

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 08:39
von STARGÅTE
"Habe versucht mit STR den String umzuwandeln, hat leider nicht geklappt."
Code ?

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 11:44
von Sirius-2337
Ironsmurf hat geschrieben:Haben eben Deinen Tip probiert, leider bekomme ich eine Fehlermeldung
"Kann keinen numerischen Wert in eine String-Variable schreiben"
Habe versucht mit STR den String umzuwandeln, hat leider nicht geklappt.
Das liegt vermutlich daran das STARGÅTE

Code: Alles auswählen

String$ = PrintN(""+PeekS(*TCPBuffer,TCPBufferLength))
geschrieben hat, richtig wäre aber (wie TomS bereits geschrieben hat):

Code: Alles auswählen

string$ = PeekS(*TCPBuffer,TCPBufferLength)
PrintN(string$)
Denn PrintN() gibt keinen String zurück.

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 11:45
von CSHW89
stargate, du hast das printn noch drin gelassen, haste wohl vergessen :lol: :

Code: Alles auswählen

String$ = PrintN(""+PeekS(*TCPBuffer,TCPBufferLength))
korrekt wäre natürlich:

Code: Alles auswählen

String$ = PeekS(*TCPBuffer,TCPBufferLength)
lg kevin

edit: oh, wer war denn da schneller :lol:

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 22.08.2010 15:54
von STARGÅTE
ubs sry ^^ :praise:
habs editiert

Re: ReceiveNetworkData in Sting$ übergeben

Verfasst: 24.08.2010 06:59
von Ironsmurf
Hallo, erst mal Danke für die Lösung des Problems.
Nun bitte ich erneut um Hilfe.
Wenn der Sterver gestartet ist mit Client AAA und Client BBB, funkioniert alles tadellos.
Schließe ich jetzt Client BBB und starte Client BBB erneut (also der 2. Start).
Schicke ich nun von Client AAA eine Nachricht an Client BBB erscheint diese doppelt und umgekehrt.
Schließe ich jetzt Client BBB ein zweites mal und starte ein drittes mal, so erscheint die Nachricht von Client AAA auf Client BBB auch dreimal.
Meine Vermutung ist, dass der Speicher nicht richtig gelöscht wird, den Sinn von AllocateMemory und FreeMemory habe ich verstanden, jedoch verstehe ich nicht diese Phänonem.
Vielen Dank für eure Mühe im voraus. :( :( :(

SERVER

Code: Alles auswählen

;Server
NewList Client.l()

InitNetwork()
CreateNetworkServer(0,6784)


OpenWindow(1,0,0,400,300,"Server", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ; OpenWindow(1,0,0,400,300,"Server", #PB_Window_Invisible)
;CreateGadgetList(WindowID(1)) ; Ist das Richtig, das diese Fuktion veraltet ist und aus dem Script entfernt werden kann ???
ButtonGadget(1,390,340,100,20,"Senden")
StringGadget(3, 10, 340, 370, 20, "")
EditorGadget(2, 10, 10, 480, 300)
*Buffer = AllocateMemory(1024)

Repeat
  ;Fenster

  EventID = WindowEvent()
  If EventID = #PB_Event_CloseWindow
    quit = 1
  EndIf
  If EventID = #PB_Event_Gadget
    If EventGadget()=1
      Text$ = GetGadgetText(3)
      ForEach Client()
        SendNetworkString(Client(), "SERVER : " +Text$)

      Next
      SetGadgetText(3, "")
    EndIf
  EndIf
  If EventID = 0
    Delay(100)
  EndIf
 
 
  ;Server
  SEvent.l = NetworkServerEvent()
 
  ;If SEvent
 
 ClientID = EventClient()
  Select SEvent
   
    Case 1
      AddGadgetItem(2, -1, "NEUER CLIENT ONLINE")
      AddElement(Client())
      Client() = ClientID
      SendNetworkString(ClientID, "Neuer Client ist online, Gruss Server")
      ;1: Ein neuer Client wurde mit dem Server verbunden
     
    Case 2
      ;MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
      ReceiveNetworkData(ClientID, *Buffer, 1024)
      AddGadgetItem(2, -1, PeekS(*Buffer))

             ForEach Client()
             
        If Client() <> ClientID
          SendNetworkString(Client(), PeekS(*Buffer))
               EndIf
      Next
      ;MessageRequester("Info", "String: "+PeekS(Buffer), 0)
      ; 2 : Roh-Daten wurden empfangen (können mittels ReceiveNetworkData() gelesen werden,)
      ;Case 3
      ;MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
      ;ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
      ; 3 : Eine Datei wurde empfangen (kann mittels ReceiveNetworkFile() gelesen werden)
    Case 4
      ;MessageRequester("Member offline", "Client "+Str(ClientID)+" Hat die verbindung unterbrochen ", 0)
     
  EndSelect
  FreeMemory(*Buffer)
 *Buffer = AllocateMemory(1024)
Until quit=1

FreeMemory(*Buffer)
*Buffer = AllocateMemory(1024)

End 
Client

Code: Alles auswählen

ip$ = "192.168.0.101"
*TCPBuffer = AllocateMemory(1024)

OpenConsole()                                 
   ConsoleTitle ("Mister Stars")
      ConsoleColor(13,0)

Name$="Client AAA"                        
   
ClearConsole()

InitNetwork()
    PrintN ("Verbindung zum Netzwerk hergestellt")
    ClientConnectionID = OpenNetworkConnection(ip$,6784)
    
 If ClientConnectionID=0
  ConsoleColor(12,0)
     PrintN("Server Offline,Verbindung zum Server nicht hergestellt")
        Input()
Else
  PrintN("Server Online,Verbindung zum Server hergestellt")

  Repeat
    
    Select NetworkClientEvent(ClientConnectionID)
        
  Case 2
        TCPBufferLength = ReceiveNetworkData(ClientConnectionID, *TCPBuffer, 1024)
           Text$ = PeekS(*TCPBuffer,TCPBufferLength)
              PrintN(Text$)
                 Text$=""

  EndSelect
    Inkey$ = Inkey()
      Inkey = Asc(Inkey$)
    
    Select Inkey
        
      Case 0
        ;nix machen
        
      Case 13
        PrintN ("")
           If Nachricht$ <> "quit"
              SendNetworkString(ClientConnectionID, Name$ +" : "+Nachricht$)
                Nachricht$ = ""
        Else
          quit = 1
          
        EndIf
        
      Default
        key$ = Left(Inkey$,1)
        Nachricht$ + key$
        Print(key$)
    EndSelect

    Delay(10)

  Until quit
   
  FreeMemory(*TCPBuffer)
  
  EndIf
 
  CloseConsole()
  
End