Autor Beitrag
vader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: So 02.05.04 13:00 
hallo,

eine frage: kann man diese beiden code's in einen
clientsocketread vereinen ?????

datei einlesen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var
  Form1: TForm1;
  FStream: TFileStream;


procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  iLen: Integer; 
  Bfr: Pointer;
begin 
  iLen := Socket.ReceiveLength; 
  GetMem(Bfr, iLen); 
  try 
    Socket.ReceiveBuf(Bfr^, iLen); 
    FStream.Write(Bfr^, iLen); 
  finally 
    FreeMem(Bfr); 
  end;

end;

treeview einlesen:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
public
  daten:boolean; 
    pos,size:integer; 
    mem:TMemoryStream;

    { Public-Deklarationen }


procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
 var a:array[0..4096]of byte; 
      buf:pointer; 
      i:integer; 
      s:string; 
begin 
   if not daten then 
   begin 
     s := Socket.ReceiveText;   //Text empfangen 
     if Copy(s,1,4) = 'Tree' then   //wurde der "Tree" gesendet? 
//in der alten Version stand hier 'tree' - kein wunder, dass nie was angekommen is ^^ 
     begin 
        delete(s,1,5);  // den Text löschen 
        for i := 1 to length(s) do  //#13#10 suchen 
          if (length(s) > i) and 
             ((s[i] = #13) and (s[i+1] = #10)) then break; 
        if i = length(s) then exit;  //nicht gefunden --> abbrechen 
// es könnte theoretisch sein, dass auch der string in mehreren packeten ankommt, es ist aber sehr unwahrscheinlich, deshalb hab ich darauf verzichtet. bei bedarf einfach genau so wie mit dem stream verfahren... 
        size := StrToint(copy(s,1,i-1));   //größe abspeichern 
        daten := true;   //daten kommen jetzt! 
        mem.Clear;   //stream löschen 
        delete(s,1,i+1);  //alles bis zum #13#10 aus dem string löschen 
        mem.Position := 0; 
        for i := 1 to length(s) Do  //alles übriggebliebene in den stream speichern 
          mem.Write(s[i],1); 
//sollte eigentlich auch mit der alten Methode gehen, kannst ja ausprobieren, wenns dir nicht gefällt ;-P 
        pos := length(s);  //position festsetzen 
        if pos >= size then     //schon alle bytes empfangen? (triff ein, wenn alles in einem packet gesendet wurde) 
        begin 
          daten := false;   //keine daten mehr! 
          mem.position := 0;    //stream zurücksetzen 
          pos := 0;    //anzahl der empfangenen bytes zurücksetzen 
          TreeView1.Items.Clear; 
          TreeView1.LoadFromStream(mem);  //empfangenen tree ins treeview laden 
       end; 
     end; 
   end 
   else 
   begin 
     buf := @a; 
     i := Socket.ReceiveBuf(buf^,4096);   //daten empfangen 
     mem.write(buf^,i);    //in stream speichern 
     pos := pos + i;     //anzahl der empfangenen bytes erhöhen 
     if pos >= size then     //schon alle bytes empfangen? 
     begin 
        daten := false;   //keine daten mehr! 
        mem.position := 0;    //stream zurücksetzen 
        pos := 0;    //anzahl der empfangenen bytes zurücksetzen 
        TreeView1.Items.Clear; 
        TreeView1.LoadFromStream(mem);  //empfangenen tree ins treeview laden 
     end; 
   end; 
end;

ist das irgenwie möglich,ohne indy bzw ftp ??

Moderiert von user profile iconPeter Lustig (19:24, 07.05.2004): Code- durch Delphi-Tags ersetzt


mfg vader
vader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Fr 07.05.04 18:19 
kann mir da keiner helfen