Mehrere SendNetworkString schnell hintereinander

Für allgemeine Fragen zur Programmierung mit PureBasic.
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Mehrere SendNetworkString schnell hintereinander

Beitrag 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
enjoy life... while you can!
NetSlayer
Beiträge: 117
Registriert: 21.09.2004 21:18
Kontaktdaten:

Beitrag von NetSlayer »

Geht das nicht so?

Code: Alles auswählen

SendNetworkString(NetworkClientID(),"test1" + chr(0)) 
Dann weiß PeekS() auch wo Schluss ist...
...MfG, NetSlayer
"No, I ain't got a problem. It's you with the problem!"
http://netslayer.scpn.net
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von Lars am 24.11.2004 22:49, insgesamt 1-mal geändert.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
NetSlayer
Beiträge: 117
Registriert: 21.09.2004 21:18
Kontaktdaten:

Beitrag 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.
...MfG, NetSlayer
"No, I ain't got a problem. It's you with the problem!"
http://netslayer.scpn.net
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Beitrag 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
enjoy life... while you can!
Antworten