![]() |
Integer übers Netzwerk versenden
ich verwende die indy komponenten idudpclient und idupdserver. alle clients senden ab und zu den wert einer integer variablen an den server. nur leider kommt immer irgendein komischer wert an...
SERVER:
Delphi-Quellcode:
CLIENT:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle); var anzahl: integer; begin AData.Read(anzahl,sizeof(integer)); Showmessage(inttostr(anzahl)); end;
Delphi-Quellcode:
danke schonmal
var anzahl: integer;
begin anzahl := 3; stream := tmemorystream.Create; stream.WriteBuffer(anzahl, sizeof(integer)); IdUDPClient1.SendBuffer(server, port, stream, sizeof(stream)); end; |
Re: Integer übers Netzwerk versenden
Wieso schaust Du dir nicht mal mit einem Sniffer wie Ethereal an was du genau versendest bzw. was auf dem Server dann ankommt. Dann kannst Du schon mal eingrenzen ob das was du versenden willst auch versendet wird bzw. beim Server ankommt. :mrgreen:
|
Re: Integer übers Netzwerk versenden
ok, also hab jetzt mal die pakete gesnifft. der fehler muss beim versenden liegen, da der integer schon falsch am server ankommt.
wert in der messagebox: 9390224 eigentlich müsste 3 ankommen. 9390224 = 008F4890 hex und der sniffer (am server) hat mir folgendes gezeigt: 45 00 00 20 40 ED 00 00 80 11 78 8B C0 A8 00 03 C0 A8 00 01 05 24 CD 1E 00 0C 8C F5 90 48 8F 00 die letzten bytes sind der integer. also muss das problem beim senden liegen. nur was mach ich falsch. jemand ne idee? |
Re: Integer übers Netzwerk versenden
Zitat:
Delphi-Quellcode:
Ich würde dir aber dringend raten, dir eine Art Protokoll ähnlich wie POP3, FTP, IRC auszudenken.
stream := tmemorystream.Create;
stream.WriteBuffer(anzahl, sizeof(integer)); stream.Position := 0; // <- auf Anfang IdUDPClient1.SendBuffer(server, port, stream, sizeof(stream)); (nicht einfach einen Integer binär ohne Zusatzinfo verschicken) Du definierst dir einen eigenen Befehlssatz und bestimmst, welche Argumente für die Befehle erlaubt sind. Wenn du alle Daten als String austauschst, hast du den grossen Vorteil, deinen Server mit TELNET von Hand testen zu können. |
Re: Integer übers Netzwerk versenden
also das auf position := 0 zurückzusetzen bringt auch nix.
Delphi-Quellcode:
wie würdet ihr dieses record übers netzwerk verschicken?
type
test= ^Ttest; Ttest = record array1: Array of Longint; array2: Array of Longint; array3: Array of Longint; array4: Array of Longint; anzahl: integer; // ist die anzahl der elemente die array1, array2, array3, array4 enthält // dabei gilt immer Länge von array1 = Länge von array2 = array3 = array4 end; danke mumu |
Re: Integer übers Netzwerk versenden
HI mumu
Es gibt bei den Indys ein Demo-Chatprogramm das beschreibt, wie man einen Chat mit Threads und den TCP-Kompos realisiert. Soweit ich weiß wurden die Nachrichten auch in einen Record übermittelt. Schau dir das am besten mal an. MfG Christian |
Re: Integer übers Netzwerk versenden
was ist eigentlich zu empfehlen, tcp oder upd. ich habe einen server und bis zu 20 clients die das record
Delphi-Quellcode:
an den server schicken.
type
test= ^Ttest; Ttest = record array1: Array of Longint; array2: Array of Longint; array3: Array of Longint; array4: Array of Longint; anzahl: integer; // ist die anzahl der elemente die array1, array2, array3, array4 enthält // dabei gilt immer Länge von array1 = Länge von array2 = array3 = array4 end; ja das demo von den indy's hab ich gefunden. nur ist halt über tcp. |
Re: Integer übers Netzwerk versenden
Was stört dich an TCP? Wenn du nicht gerade den Server per Broadcast suchen möchtest würde ich auf TCP zurückgreifen.
MfG Christian |
Re: Integer übers Netzwerk versenden
Zum Thema "zu empfehlen":
Wenn du sicher gehen möchtest, dass die Pakete mit den Daten auch bei den Clients ankommen, solltest du auf TCP zurückgreifen, da werden evtl. verloren gegangene Pakete nochmal gesendet. Außerdem bist du da bei ~20 Clients auf der sicheren Seite. Solange nichts zu broadcasten ist, sollte man immer besser TCP nutzen (hab ich die Erfahrung gemacht ;-)) |
Re: Integer übers Netzwerk versenden
Kann man eigentlich Arrays bzw. TStringLists, die sich in einem Record befinden, per SendBuffer verschicken?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz