Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Übertragungsprotokoll für TSocket ??? (https://www.delphipraxis.net/148631-uebertragungsprotokoll-fuer-tsocket.html)

Astat 5. Mär 2010 14:13

Re: Übertragungsprotokoll für TSocket ???
 
Zitat:

Zitat von jokerfacehro
ich verstehs einfach nicht.

Thread #15 mit Kugeln:

http://www.delphipraxis.net/internal...623&highlight=

lg. Astat

jokerfacehro 5. Mär 2010 14:15

Re: Übertragungsprotokoll für TSocket ???
 
sooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooo

problem erkannt, allerdings noch keine lösung gefunden es zu beheben:

ich habs jetzt hinbekommen, es lag am sender:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var st:TFileStream;
    str:string;
    buffer:array[1..8192] of Byte;
    i:integer;
begin

st:=TFileStream.Create('C:\Dokumente und Einstellungen\Admin\Eigene Dateien\data\backer\server\txt.txt',fmOpenRead);
st.Position:=0;
i:=8192;

//FillChar(str,8192,#0);
//str:=#00#01#00#01#00#04+IntToStr(st.Size)+#13#10+'C:\'+#13#10+'txt.txt'+#13#10;
//Send(FConnectSocket[0],str[1],Length(str),0);
setLength(str,i);
while st.Position<st.Size do begin
//FillChar(buffer,1024,#0);
if st.Size-st.Position<8192 then begin ///----> wichtig
 i:=st.Size-st.Position;
 setLength(str,i);
 end;
st.Read(str[1],i);
Send(FConnectSocket[0],str[1],Length(str),0);
end;
  st.Free;
end;

jetz empfängt er beim ersten senden die richtig anzahl von daten.
wenn ich allerdings ein 2. mal das gleiche sende sind es etwa 8KB daten zu viel, als wenn noch etwas im chache vom server steht.
wie kann ich die restlichen daten löschen ?


Edit: irgendwie hauts immer noch nicht hin, jetzt fehlen genau 8192 byte



@Astat danke für den eitnrag, werds mir ma anschaun


Edit2: ich hab jetzt gemerkt, wenn ich debugge und sende kommt alles an, lasse ich das programm einfach durchlaufen fehlen immer 8192byte

jokerfacehro 8. Mär 2010 13:04

Re: Übertragungsprotokoll für TSocket ???
 
so ^^

ic hhabs jetz hinbekommen:

ich sende jetzt so:

Datengröße|Befehl|Daten..................

Datengröße besteht aus 4 Byte, somit ist die maximale datengröße auf 4GB begrenzt.
Befehl besteht aus 2Byte und wird gleich extrahiert um schneller entscheiden zu können was mit den restliche daten passieren soll.
Dann folgen die Daten.


Der Client empfängt das erste teilstück und speichert sich die datenlänge ab.
dann empfängt er so viele daten, bis die angegeben datenmenge erreicht ist,
dann schneidet er diese ab, speichert sie zusammen mit datengröße und befehl in einem paket und löst OnExecute aus, wo
der befehl dann verarbeitet wird.

überschüssige daten bleiben im speicher und sind gleichbedeutend mit dem anfang eines neuen paketes.

Astat 8. Mär 2010 15:41

Re: Übertragungsprotokoll für TSocket ???
 
Hallo jokerfacehro, ein JA, wenn die Daten korrekt für jeden Socket (Client-Verbindung) aufbereitet wurden.

D.h. wenn viele Clients am Server, braucht man für jeden Client einen separaten Empfangsbuffer, der so
zu behandeln ist, wie du geschrieben hast.
Globaler Socket Empfangsbuffer --> Dispatch --> zum Client-Buffer.

lg. Astat

jokerfacehro 8. Mär 2010 22:01

Re: Übertragungsprotokoll für TSocket ???
 
ähm ?

zur erläuterung: das ganze läuft am client ab.

der server ist vcl und bekommt, doch eh den socket mitgeliefert für jeden client,
sodass ich direkt im event unterscheiden kann, welcher client gerade spricht und kann das ganze im record zusammenspeichern

Astat 8. Mär 2010 22:14

Re: Übertragungsprotokoll für TSocket ???
 
Zitat:

Zitat von jokerfacehro
ähm ?

Hallo jokerfacehro, auch ähm, es ist Montag und das ist immer ein schlechter Tag für mich!!
Hätte doch genauer lesen sollen, sorry. :wall:

lg. Asat

jokerfacehro 9. Mär 2010 10:13

Re: Übertragungsprotokoll für TSocket ???
 
Zitat:

Zitat von Astat
Zitat:

Zitat von jokerfacehro
ähm ?

Hallo jokerfacehro, auch ähm, es ist Montag und das ist immer ein schlechter Tag für mich!!
Hätte doch genauer lesen sollen, sorry. :wall:

lg. Asat


:cyclops: :mrgreen: kein problem :D


beim datenspeichern mach ich es anders, ich schreibe die datei on the fly, so brauhc ich nicht alles zwischen speichern, das
hat mir 250mb ram gespaart und lieber mit blockwrite anstatt mit write schreiben ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.
Seite 2 von 2     12   

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