Seite 1 von 1

Mehrere SendNetworkString schnell hintereinander

Verfasst: 24.11.2004 22:31
von sbehrens
Hi Leutz,

Ich habe folgendes Problem. Wenn mein Server Programm ganz viele Strings schnell hintereinander sendet, empfängt das Client-Programm alle vom Server gesendeten Strings aufeinmal, alle in einem String. Hier ein BeispielCode:
Server.pb

Code: Alles auswählen

InitNetwork()

OpenWindow(1,0,0,100,0,#PB_Window_ScreenCentered,"Server")
CreateNetworkServer(12345)

Repeat
  Select NetworkServerEvent()
  Case 1
    SendNetworkString(NetworkClientID(),"test1")
    SendNetworkString(NetworkClientID(),"test2")
    SendNetworkString(NetworkClientID(),"test3")
  Default
    Delay(10)
  EndSelect
Until WindowEvent()=#PB_Event_CloseWindow
CloseNetworkServer()
Client.pb

Code: Alles auswählen

InitNetwork()

OpenWindow(1,200,200,100,0,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Client")
ServerID=OpenNetworkConnection("127.0.0.1",12345)

Repeat
  Select NetworkClientEvent(ServerID)
  Case 2
    mem=AllocateMemory(1024)
    ReceiveNetworkData(ServerID,mem,1024)
    Debug PeekS(mem)
  Default
    Delay(10)
  EndSelect
Until WindowEvent()=#PB_Event_CloseWindow
CloseNetworkConnection(ServerID)
Der Debugger Spuckt bei mir das aus:
Debugger hat geschrieben:Test1Test2Test3
Wie kann man das verhindern? Also es soll alles einzeln ankommen!
Vielen Dank im Vorraus!

mfG
Basti

Verfasst: 24.11.2004 22:37
von NetSlayer
Geht das nicht so?

Code: Alles auswählen

SendNetworkString(NetworkClientID(),"test1" + chr(0)) 
Dann weiß PeekS() auch wo Schluss ist...

Verfasst: 24.11.2004 22:42
von Lars
Dafür ist ein Protokoll gut, also eine Vorgabe, wie der Client bzw. Server
empfangenes zu erwarten hat. Da geht z.B. ein Chr(0) als Trennzeichen,
aber auch CRLF oder derartiges.

Verfasst: 24.11.2004 22:46
von NetSlayer
Lars hat geschrieben:Dafür ist ein protokoll gut, also eine Vorgabe, wie der Client bzw. Server
empfangenes zu erwarten hat. Da geht z.B. ein Chr(0) als Trennzeichen,
aber auch CRLF oder derartiges.
Jo hast schon recht, aber ich wollte das mit chr(0) machen, weil PeekS() das ja von Haus aus erkennt.

Verfasst: 24.11.2004 23:02
von MVXA
Ja und alles was hinter Chr(0) steht ist ohne besondere auslese routinen "verloren" ;)

Hier mal ein protokoll was ich definiert habe:

Code: Alles auswählen

Befehl[1]Länge[2]Daten[4]
Hat den vorteil das Befehl klar getrent ist und man durch Länge überprüfen kann ob das Packet in irgendeinerweise beschädigt ist. Byte 4 steht dann als abtrennung zum nähsten Packet da.

Verfasst: 24.11.2004 23:12
von sbehrens
Vielen Dank erstmal, werde es heute Abend/morgen mal ausprobieren.
@LittleFurz: An so ein ähnliches Protokoll habe ich eben auch gerade gedacht.
Thx.

mfG
Basti