AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke UDP Datei senden und empfangen
Thema durchsuchen
Ansicht
Themen-Optionen

UDP Datei senden und empfangen

Ein Thema von TTF · begonnen am 27. Okt 2013 · letzter Beitrag vom 29. Okt 2013
Antwort Antwort
Benutzerbild von TTF
TTF

Registriert seit: 19. Mai 2013
70 Beiträge
 
Delphi XE4 Enterprise
 
#1

UDP Datei senden und empfangen

  Alt 27. Okt 2013, 10:43
Hallo liebe Delphianer,

Als erstes wollte ich mich bedanken bei diesem genialen Forum, in dem die Leute so schnell und gut antworten wie fast nirgends sonst.

Mein Problem:
Ich möchte gerne Dateien über UDP versenden. Für den Anfang erst einaml mit den Komponenten von Indy(oder andere, falls sie sich besser eignen).
Das Problem ist, dass ich auf keinen Fall auf TCP ausweichen kann, wie überall vorgeschlagen, denn ich möchte die Technik des Hole Punchings verwenden, welches sich an eine Ungenauigkeit von UDP anlehnt. Also kann man eigentlich sagen, mein "Vorbild" ist Skype(kann auch Dateien senden und benutzt UDP): http://www.heise.de/security/artikel...en-270856.html

Meine bisherigen Versuche sind alle schon gescheitert, bevor das Programm fertig compiliert war...
Meistens mit dieser Meldung:
[dcc32 Fehler] Unit1.pas(55): E2250 Es gibt keine überladene Version von 'SendBuffer', die man mit diesen Argumenten aufrufen kann

Hat jemand eine Idee, wie man das lösen kann?
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: UDP Datei senden und empfangen

  Alt 27. Okt 2013, 14:49
Ich schlage vor, dass du lernst, wie man mit den Komponenten erst überhaupt umgeht. Kompliziertere Sachen sollten erst später kommen, da du sonst dir die Zähne daran ausbeißt und gar keine Freude mehr am Ganzen findest.

Und der Fehler den du da beschreibst, sollte man wenn man das ABC von Delphi kann, schnell beheben können.

Schau dir mal paar Grundlagentutorials an. Vorallem Funktionen/Prozeduren/Methoden + Rümpfe/Parameter
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von TTF
TTF

Registriert seit: 19. Mai 2013
70 Beiträge
 
Delphi XE4 Enterprise
 
#3

AW: UDP Datei senden und empfangen

  Alt 27. Okt 2013, 17:54
Naja, wie dem auch sei...
Mit einer eigenen Minidatei habe ich es nun hingekriegt. Das komische ist aber wenn ich es mit einer *.txt Datei versuche, die nicht allzu viel grösser ist und erhalte die Exception
"Zu wenig Arbeitsspeicher". Ich kann mir beim besten Willen nicht vorstellen, dass das stimmen kann. Weiss jemand woran das liegen könnte?
Die Meldung kommt auch ohne abschicken, nur beim Laden in ein Byte-Array.
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: UDP Datei senden und empfangen

  Alt 27. Okt 2013, 18:12
Vielleicht lädst du falsch.. Wir können nicht hellsehen, daher musst du genug Information liefern!
=P
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von TTF
TTF

Registriert seit: 19. Mai 2013
70 Beiträge
 
Delphi XE4 Enterprise
 
#5

AW: UDP Datei senden und empfangen

  Alt 27. Okt 2013, 18:41
Ich habe den Fehler gefunden und es funktioniert auch soweit(Habe die Länge der Datei falsch zugewiesen). Aber wenn ich die Datei nach dem Senden wieder abspeichere steht in der geladenen *.txt nebst dem ursprünglichen Text noch etwas anderes nämlich ein komisches Zeichen. Sieht ungefähr so aus: _|. Und wenn ich es mit einem *.bmp versuche geht es gar nicht(das erzeugt Bild lässt sich nicht richtig öffnen).
Anscheinend habe ich wohl noch den einen oder anderen Fehler drin:
Delphi-Quellcode:
//Senden
var
  Stream : TStream;
  i : Integer;
  Len : Longint;
  Datei : TIdBytes;
begin
  Stream := TFileStream.Create('D:\Testbild.bmp', fmOpenRead);

  Len := Stream.Size;

  SetLength(Datei,Len);

  for i := 0 to Len -1 do
  begin
    Stream.Read(Datei[i], SizeOf(Datei[i]));
  end;

  Stream.Free;

  IdUDPClient1.SendBuffer(Datei);
end;

//Empfangen:

var
  Stream : TStream;
  Len, i : Integer;
begin
  Stream := TFileStream.Create('D:\testbild1.bmp', fmCreate);

  Len := Length(AData);
  Stream.Write(Len, SizeOf(Len));

  for i := 0 to Length(AData)-1 do
  begin
    Stream.Write(AData[i], SizeOf(AData[i]))
  end;

  Stream.Free;
end;
Wäre froh, wenn sich jemand das mal anschauen könnte.
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
Benutzerbild von TTF
TTF

Registriert seit: 19. Mai 2013
70 Beiträge
 
Delphi XE4 Enterprise
 
#6

AW: UDP Datei senden und empfangen

  Alt 27. Okt 2013, 19:08
Es hat nun geklappt. Ich hatte noch unnötige Überreste von meiner eigenen Datei drin, wodurch das bmp ungültig wurde
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.401 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: UDP Datei senden und empfangen

  Alt 27. Okt 2013, 19:11
Via UDP kannst du allerdings nie wissen, ob du auch alle Teile der Datei bekommst und ob sie in der richtigen Reihenfolge sind. Wenn du also unbedingt UDP nutzen willst, musst du die Pakete markieren und beim Empfang entsprechend wieder zusammensetzen. Sich darauf zu verlassen, dass es schon klappen wird, könnte lustige / traurige Ergebnisse bringen.

Für Hole Punching ist UDP allerdings nicht erforderlich, Skype verschickt Dateien auch per TCP, alles andere wäre auch wenig sinnvoll. Mehr zu TCP Hole Punching:
http://en.wikipedia.org/wiki/TCP_hole_punching
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:19 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