Autor Beitrag
Baumunk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

WinXP
Delphi 2005
BeitragVerfasst: Di 25.10.05 12:37 
Hallo,

Immer wieder TCP/IP mit Indy,

Ich kriege nicht in lauf fahrscheinlich elementare sache:

Ich muss Daten senden von TidTCPServer zu TIdTCPClient

Server :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm2.IdTCPServer1Execute(AContext: TIdContext);
Var S : TSendRecord;
    memVCL : TidStreamVCL;
    mem    : TMemoryStream;
begin
  If Not AContext.Connection.IOHandler.Readable Then Exit;

  Value := AContext.Connection.IOHandler.ReadInteger;
  AContext.Connection.IOHandler.Write(Integer (100));
  S.A := 'IntToStr = ' + IntToStr (Value);
  mem    := TMemoryStream.Create;
  memVCL := TidStreamVCL.Create(mem);
  mem.Write(S, SizeOf (s));
  memVCL.Position := 0;

  AContext.Connection.IOHandler.Write (memVCL, memVCL.Size);
  memVCL.Free;
  mem.Free;
end;


Da läuft's noch:

Client :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
Var S : TSendRecord;
    memVCL : TidStreamVCL;
    mem    : TMemoryStream;
    I      : Integer;
begin
  IdTCPClient1.IOHandler.Write (Integer (100));
  While Not IdTCPClient1.IOHandler.Readable Do Begin { Schleife }
  End;

  If IdTCPClient1.IOHandler.Readable Then Begin
    mem    := TMemoryStream.Create;
    memVCL := TidStreamVCL.Create(mem);
    I := IdTCPClient1.IOHandler.ReadInteger;
    IdTCPClient1.IOHandler.ReadStream(memVCL, SizeOf (S));
    memVCL.Position := 0;
    mem.Read(S, SizeOf (S));
    Memo1.Lines.Add(S.A);
    memVCL.Free;
    mem.Free;
  End;


Bei der { Schleife } bleib er hängen, es gibts IdTCPClient1.IOHandler.Readable nur False.

Konnte mir jemand sagen was da falsch wäre oder noch besser Funktionierende beispiel geben, wo daten von Server zu gesendet und empfangen können.
Baumunk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

WinXP
Delphi 2005
BeitragVerfasst: Di 25.10.05 17:40 
Kleine Korrektur

Anstatt zeilen 7 - 20

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  While Not IdTCPClient1.Socket.Readable (0Do Begin
    Application.ProcessMessages;
  End;


  If IdTCPClient1.Socket.Readable (0Then Begin
    mem    := TMemoryStream.Create;
    memVCL := TidStreamVCL.Create(mem);
    I := IdTCPClient1.IOHandler.ReadInteger;
    IdTCPClient1.IOHandler.ReadStream(memVCL, SizeOf (S));
    memVCL.Position := 0;
    mem.Read(S, SizeOf (S));
    Memo1.Lines.Add(S.A);
    memVCL.Free;
    mem.Free;
    IdTCPClient1.IOHandler.Close;
  End;


Das funktioniert ja, jedoch es muss permanent nach anfrage von dem Server Verbindung geschlossen!

Ist es ein Bug von Indy oder kann es ohne die Verbindung schliesssen und wieder offnen gemacht?

Ich wäre sehr dankdar, wenn jemand mir den Tipp, hinweis, wie ich das schreiben soll!!