Toon posts:

[Kylix] Try..except levert problemen met indy tcp server

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik de Indy 9 TCPServer.

In de OnExecute event heb ik dit staan:

Delphi:
1
2
3
4
5
6
7
8
  try
    Input := AThread.Connection.ReadLn;
  except
    on E: Exception do
    begin

    end;
  end;


Echter dit levert problemen op. Als ik nu geen try except gebruik, werkt het wel gewoon goed.

Na wat experimenteren ben ik er achter gekomen dat als ik onder aan de event het volgende zet:

Delphi:
1
  AThread.Terminate;

werkt het wel gewoon goed met die try except.


Maar ik heb in de demo's van Indy gekeken en daar gebruiken ze dat niet. Mijn vraag is daarom of dit wel de juiste/goede methode is?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Kan je misschien vertellen over de problemen die je krijgt, ik heb namelijk mijn glazen bol weer eens laten vallen.....

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Programma A stuurt een bericht naar programma B. Programma B ontvangt het en stuurt vervolgens een bericht terug naar A.

Hierna loopt programma B vast.

Als ik nu bij programma B die thread niet terminate, loopt die vast op die try ...except.


Maar ik snap niet waarom die op een try..except vast kan lopen.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

TCPServer is geen Indy. TIdTCPServer is wel Indy. Over welke hebben we het hier?

Wat is AThread.Connection? Een TCPServer? Dan is je thread nutteloos. De enige code die uitgevoerd hoort te worden door een thread staat in de Execute method. De rest is ter ondersteuning of anders nutteloos.

Als het toch echt Indy is waar we het hier over hebben zij de calls blocking en returned ReadLn niet voordat er ook daadwerkelijk wat gelezen is. Kennelijk is dat niet het geval bij jouw.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
LordLarry schreef op 08 april 2003 @ 13:24:
TCPServer is geen Indy. TIdTCPServer is wel Indy. Over welke hebben we het hier?

Wat is AThread.Connection? Een TCPServer? Dan is je thread nutteloos. De enige code die uitgevoerd hoort te worden door een thread staat in de Execute method. De rest is ter ondersteuning of anders nutteloos.

Als het toch echt Indy is waar we het hier over hebben zij de calls blocking en returned ReadLn niet voordat er ook daadwerkelijk wat gelezen is. Kennelijk is dat niet het geval bij jouw.
Sorry voor de onduidelijkheid. Ik maak gebruik van de indy tcp server, dus: TidTCPServer.

AThread is van het type TIdPeerThread.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En AThread.Connection?

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Delphi:
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
procedure TXMLServer.IdTCPServerExecute(AThread: TIdPeerThread);
var XMLDocument: TXMLDocument;
begin
  try
    Input := AThread.Connection.ReadLn;
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
    end;
  end;

  AThread.Synchronize(ShowInput);

  // Stuur een antwoord terug naar de client
  try
    AThread.Connection.WriteLn('ACK');
  except
    on E: Exception do
    begin
      ShowMessage('Error send ACK: ' + E.Message);
    end;
  end;

  AThread.Terminate;
end;

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Hmmm....ik heb kennelijk niet zoveel verstand van Indy. Ik vind dit er allemaal maar raar uitzien, maar tis kennelijk wel ok ofzo.

We adore chaos because we like to restore order - M.C. Escher


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025
ShowMessage(E.Message); mag niet gebruikt worden in een andere thread dan de main VCL thread. Je moet of deze synchroniseren op de main thread of gebruik de Win32 API windows.messagebox (in de unit windows).
Pagina: 1