Entwickler-Ecke
Internet / Netzwerk - TCP/IP Records zu lang
fanspiraphi - Fr 15.08.08 22:15
Titel: TCP/IP Records zu lang
Hallo allerseits,
ich sende und empfange mit einer Client und Server Anwendung lokal diesen record:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type rbuf = record key:string[255]; msg:string[255]; color:tcolor; Left:integer; Top:integer; item:string[255]; accept:string[255]; username:string[255]; target:string[255]; location:string[255]; eq:string[255]; image:string[255]; typ:string[255]; sender:string[255]; hp:integer; hit:integer; hpmax:integer; end; |
Empfangen wird er so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var l:integer; begin l:=socket.ReceiveLength; socket.ReceiveBuf(buf,l); |
Nun werden manchmal ziemlich schnell hintereinander zwei dieser Records versendet, die dann verschmelzen. Dieses wirr-warr versucht man dann wieder in den Record zu Pressen, was nicht funktioniert und somit bekomme ich eine CPU- und Fehlermedlung und mein Programm stürzt ab.
Ich habe leider keine Idee wie ich statt diesem Wirr-Warr 2 Verschiedene Buffer empfange, oder verhindere dass beide Buffer auf einmal ankommen.
Ich hoffe ihr könnt mir helfen :D
Xentar - Sa 16.08.08 03:45
Sende ein Start- und Endezeichen mit, so dass du genau weißt, wann der erste Record aufhört, und der zweite anfängt.
Aber eigentlich kannst du dich doch an der Länge orientieren? Du weißt doch, wie lang dein Record ist - und nach so viel Bytes fängt eben der zweite an..
fanspiraphi - Sa 16.08.08 23:10
Danke für die schnelle Antwort!
Ich werde es so machen (oder zumindest Versuchen):
Eine Unit programmieren die den record rbuf in einen String umwandelt welcher ungefähr so aussehen wird:
Delphi-Quelltext
1: 2:
| var s:string; s:='#START#KEYtest#USERNAMEname#LOCATIONort...#END'; |
sowie eine prozedur die das ganze wieder zurückverwandelt.
dabei kann beim zurückverwandeln der string auch so aussehen:
Delphi-Quelltext
1: 2:
| var s:string; s:='blablablaunsinn...#START#KEYtest#USERNAMEname#LOCATIONort...#ENDblablablaunbsinnoderwasweisichwas'; |
Diesen record kann ich wie gewohnt verwenden, ohne viele änderungen vorzunehmen. Der Umgewandelte String wird jeweils per Sendtext und recivetext gesendet/empfangen.
Hat jemand Verbesserungs / andere Vorschläge
PS.:Ist das dann schon ein Protokoll? Danke Narses hast mir sehr geholfen :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!