AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Übertragungsprotokoll für TSocket ???
Thema durchsuchen
Ansicht
Themen-Optionen

Übertragungsprotokoll für TSocket ???

Ein Thema von jokerfacehro · begonnen am 5. Mär 2010 · letzter Beitrag vom 9. Mär 2010
Antwort Antwort
Seite 2 von 2     12   
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#11

Re: Übertragungsprotokoll für TSocket ???

  Alt 5. Mär 2010, 15:13
Zitat von jokerfacehro:
ich verstehs einfach nicht.
Thread #15 mit Kugeln:

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

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Übertragungsprotokoll für TSocket ???

  Alt 5. Mär 2010, 15:15
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
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Übertragungsprotokoll für TSocket ???

  Alt 8. Mär 2010, 14:04
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.
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#14

Re: Übertragungsprotokoll für TSocket ???

  Alt 8. Mär 2010, 16:41
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
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Übertragungsprotokoll für TSocket ???

  Alt 8. Mär 2010, 23:01
ä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
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#16

Re: Übertragungsprotokoll für TSocket ???

  Alt 8. Mär 2010, 23:14
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.

lg. Asat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Übertragungsprotokoll für TSocket ???

  Alt 9. Mär 2010, 11:13
Zitat von Astat:
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.

lg. Asat

kein problem


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 ^^
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:22 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