![]() |
Re: ClientSocket steam verschicken mit vorherigen Zeichen
nein guck doch mal die Antwort von Muetze1 an steht wieder eine Möglichkeit drinne!
also du brauchst ein Zeichen oder eine Zeichenfolge die dir sagt: fertig hatte da mal was schönes gecodet:
Delphi-Quellcode:
damit geht es theoretisch aber du brauchst halt egl zeichen die in einer Datei nicht vorkommen... was aber schwierig wird da ja jedes Zeichen vorkommen kann
procedure TForm1.ss_serverClientRead(Sender: TObject; Socket: TCustomWinSocket);
var s_receve,s_temp:string; b_da:boolean; I,i_sockethander: Integer; begin i_sockethander:=socket.SocketHandle; for I := 0 to lv_bots.Items.Count - 1 do begin if (lv_bots.Items.Item[i].SubItems.Strings[8]=inttostr(i_sockethander)) then begin s_receve:=lv_bots.Items.Item[i].SubItems.Strings[9]; end; end; s_receve:=s_receve+Socket.ReceiveText; repeat begin b_da:=false; s_temp:=''; for I := 0 to length(s_receve) -1 do begin if (s_receve[i]='|') then begin b_da:=true; end; end; if (b_da=true) then begin s_temp := copy(s_receve, 1, pos('|', s_receve) - 1); s_receve := copy(s_receve, pos('|', s_receve) + 1, length(s_receve)); for I := 0 to lv_bots.Items.Count - 1 do begin if (lv_bots.Items.Item[i].SubItems.Strings[8]=inttostr(i_sockethander)) then begin lv_bots.Items.Item[i].SubItems.Strings[9]:=s_receve; end; end; if (s_temp<>'') then begin handle(i_sockethander,s_temp); end; end; end; until (b_da=false); end; |
Re: ClientSocket steam verschicken mit vorherigen Zeichen
Zitat:
Somit: Du musst dir selber ein Protokoll ausdenken und entsprechend umsetzen. Wenn du weisst, dass der Anfang immer "File-xxxxx:" ist, dann kannst du im OnClientRead (wenn noch keine Datei empfangen wird), schauen ob im Buffer ( ![]() Das ist dann schon eine Art Protokoll. /EDIT: roter Kasten??? /EDIT2: gandime: du weisst um direkte Vergleiche mit true bzw. false? |
Re: ClientSocket steam verschicken mit vorherigen Zeichen
Die Procedure von oben ist schon etwas älter und überholt ;-) hatte nich wieder rübergeguckt.
Hab mir jetzt mal eine andere überlegt und zwar werden als erste paar zeichen die Länge des Strings geschickt usw guckt selber ;-)
Delphi-Quellcode:
jetzt wollte ich fragen ob es zu Komplikationen kommen kann?
procedure TForm1.send(s_text:string);
var s_length:string; i_length:integer; begin i_length:=length(s_text); if i_length<10 then begin s_length:='000'+inttostr(i_length); end else if i_length<100 then begin s_length:='00'+inttostr(i_length); end else if i_length<100 then begin s_length:='0'+inttostr(i_length); end else begin s_length:=inttostr(i_length); end; cs.Socket.SendText(s_length+s_text); end; procedure TForm1.ssClientRead(Sender: TObject; Socket: TCustomWinSocket); var s_receive,s_length,s_command:string; i_length:integer; begin if length(s_buff)+socket.ReceiveLength>=4 then begin s_receive:=s_buff+socket.ReceiveText; s_length:=s_Receive; setlength(s_length,4); i_length:=strtoint(s_length); if length(s_receive)-4>=i_length then begin s_receive:=copy(s_receive,4+1,length(s_receive)); s_command:=s_receive; setlength(s_command,i_length); s_buff:=copy(s_receive,i_length+1,length(s_receive)); //und dann halt auswerten end else begin s_buff:=s_receive; end; end else begin s_buff:=s_buff+socket.ReceiveText; end; end; wenn z.B. der Server ein falschen Start String bekommt wie finde ich dann den nächsten anfang? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr. |
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