Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Integer übers Netzwerk versenden (https://www.delphipraxis.net/36127-integer-uebers-netzwerk-versenden.html)

mumu 16. Dez 2004 09:24


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:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var anzahl: integer;
begin
  AData.Read(anzahl,sizeof(integer));

  Showmessage(inttostr(anzahl));
end;
CLIENT:
Delphi-Quellcode:
var anzahl: integer;
begin
  anzahl := 3;
  stream := tmemorystream.Create;
  stream.WriteBuffer(anzahl, sizeof(integer));
  IdUDPClient1.SendBuffer(server, port, stream, sizeof(stream));
end;
danke schonmal

Surrounder 16. Dez 2004 09:30

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:

mumu 16. Dez 2004 09:59

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?

shmia 16. Dez 2004 10:34

Re: Integer übers Netzwerk versenden
 
Zitat:

Zitat von mumu
also muss das problem beim senden liegen. nur was mach ich falsch.

Vor dem Senden solltest du deinen Stream zurücksetzen:
Delphi-Quellcode:
  stream := tmemorystream.Create;
  stream.WriteBuffer(anzahl, sizeof(integer));
  stream.Position := 0; // <- auf Anfang
  IdUDPClient1.SendBuffer(server, port, stream, sizeof(stream));
Ich würde dir aber dringend raten, dir eine Art Protokoll ähnlich wie POP3, FTP, IRC auszudenken.
(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.

mumu 16. Dez 2004 14:06

Re: Integer übers Netzwerk versenden
 
also das auf position := 0 zurückzusetzen bringt auch nix.

Delphi-Quellcode:
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;
wie würdet ihr dieses record übers netzwerk verschicken?

danke
mumu

Chris1986 16. Dez 2004 14:09

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

mumu 16. Dez 2004 14:20

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:
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;
an den server schicken.



ja das demo von den indy's hab ich gefunden. nur ist halt über tcp.

Chris1986 16. Dez 2004 14:23

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

Ultimator 16. Dez 2004 14:57

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 ;-))

Stefan Hueg 16. Dez 2004 15:22

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.
Seite 1 von 2  1 2      

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