ReceiveNetworkData in Sting$ übergeben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

ReceiveNetworkData in Sting$ übergeben

Beitrag 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
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag von TomS »

Code: Alles auswählen

string$ = PeekS(*TCPBuffer,TCPBufferLength)
PrintN(string$)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag 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 /:->
Zuletzt geändert von STARGÅTE am 22.08.2010 15:55, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag von Ironsmurf »

Sorry, war keine Absicht mit der Fettschrift.
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag 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.
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag von STARGÅTE »

"Habe versucht mit STR den String umzuwandeln, hat leider nicht geklappt."
Code ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag 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.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag 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:
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag von STARGÅTE »

ubs sry ^^ :praise:
habs editiert
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Re: ReceiveNetworkData in Sting$ übergeben

Beitrag 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
Es kommt immer auf die Sichtweise des Betrachters an.
Antworten