Toon posts:

[delphi] Probleem met Indy's TidTCPServer/Client component

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo, ik heb een probleem met de TidTCPServer/Client componenten van Indy.
ik ben er nu al een week meebezig geweest en gezocht op internet om het op te lossen maar ik kom er niet uit.

Het probleem zit in het verzenden van regels naar een client, als ik in onderstaande code 4 regels verzend naar een client dan komt er steeds maar 1 regel van deze 4 aan, hoe is dit nu mogelijk?

Het vage vind ik dat als ik vannaf een client 4 van deze regels verstuurd dat deze op de server wel allemaal aankomen, maar andersom niet! |:(

(Servercode)
procedure TFileCheckerForm.ServerExecute(AThread: TIdPeerThread);
var Msg : shortString;
begin
Msg := AThread.Connection.ReadLn;
LOG.Items.Add('Incoming:'+Msg);
AThread.Connection.WriteLn('HoiHoi');
AThread.Connection.WriteLn('HoiHoi');
AThread.Connection.WriteLn('HoiHoi');
AThread.Connection.WriteLn('HoiHoi');
if Msg <> '' then
Main_functions_Thread.addJob(AThread, Msg);
end;

of gaat er iets mis met een TIdPeerThread, dat deze op een timeout wacht ofzo??

  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

mmm...raar idd, al eens geprobeert om 4 verschillende regels te zenden? Mischien denkt de client dat het er maar 1 is omdat ze niet veranderen?

If you come here... you'll find me... I promise


Verwijderd

Topicstarter
Nee, dit maakt geen verschil

  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

Mischien eens de procedure WriteStrings gebruiken? Neemt als parameter een TStrings. Ik heb het zelf geprobeert te testen maar ik krijg helemaal niks, waarschijnlijk doe ik iets mis.

If you come here... you'll find me... I promise


Verwijderd

Topicstarter
Ik heb een TStrings geprobeerd maar ook hiermee wordt alleen de eerste string ontvangen op de client.
De client luistert met een thread continu de client.readln af tot een regel is ontvangen.

(client code)
code:
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
  TRecvThread = class(TThread)
  private
    Msg : string;
    procedure ReceivedLine;
  protected
    procedure Execute; override;
  end;


procedure TRecvThread.Execute;
begin
  while not Terminated and FileCheckerForm.Client.Connected do begin
    try
      Msg := FileCheckerForm.Client.ReadLn;
      Synchronize(ReceivedLine);
    finally
      Terminate;
    end;
  end;
end;

procedure TRecvThread.ReceivedLine;
begin
  FileCheckerForm.LOG.Items.Add('receiced from |server|'+Msg);
end;

Volgensmij ligt het ook niet aan de client applicatie of zie ik misschien iets over het hoofd nu

Verwijderd

Zo te zien terminate je de connectie na het ontvangen van een regel:
code:
1
2
3
    finally
      Terminate;
    end;

  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

ja idd, dat zou waarschijnlijk except moeten zijn? Niet moeilijk dat je dan maar 1 lijntje binnenkrijgt ;)

If you come here... you'll find me... I promise


Verwijderd

Topicstarter
Nou wordt ik helemaal gek! 8)7
Een week zoeken naar de fout en dit overhet hoofd zien! aarg...

Bedankt voor jullie tijd. :*)
Pagina: 1