AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Integer übers Netzwerk versenden
Thema durchsuchen
Ansicht
Themen-Optionen

Integer übers Netzwerk versenden

Ein Thema von mumu · begonnen am 16. Dez 2004 · letzter Beitrag vom 17. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#1

Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 09:24
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
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 09:30
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.
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#3

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 09:59
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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 10:34
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.
Andreas
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#5

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 14:06
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
  Mit Zitat antworten Zitat
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 14:09
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
Es gibt nur 10 Typen von Menschen auf der Welt:
Die, die Binärcode verstehen und die, die es nicht tun . . .
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#7

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 14:20
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.
  Mit Zitat antworten Zitat
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 14:23
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
Es gibt nur 10 Typen von Menschen auf der Welt:
Die, die Binärcode verstehen und die, die es nicht tun . . .
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 14:57
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 )
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Integer übers Netzwerk versenden

  Alt 16. Dez 2004, 15:22
Kann man eigentlich Arrays bzw. TStringLists, die sich in einem Record befinden, per SendBuffer verschicken?
Stefan Hueg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz