Toon posts:

[Delphi] Niet-bestaand ip adres

Pagina: 1
Acties:

Verwijderd

Topicstarter
In je Delphi directory zit een bestand, \Demos\Internet\Chat.dpr

Als ik deze open, run, en connect naar een niet-bestaand ip gebeurt er dit:

with ClientSocket do
begin
Host := Server;
----> Active := True;
FileListenItem.Checked := False;
end;

Omdat de ClientSocket Active wordt met een ip adres dat niet bestaat crasht het programma bij mij, MAAR omdat het enkele seconden duurt voordat hij met de error aankomt kan ik het niet opvangen met een try-except en breakt hij na de "Application.Run" in de project unit, namelijk bij "end."

Hoe kan ik deze error toch opvangen?

Verwijderd

Delphi help:
Occurs when the socket fails in making, using, or shutting down a connection.

property OnError: TSocketErrorEvent;

Description

Write an OnError event handler to respond to errors that arise with the socket connection. Set the ErrorCode parameter to 0 if the OnError event handler successfully deals with the error condition, to prevent an ESocketError from being raised.
Ik heb het echter geprobeerd. Maar na een tijdje stilstand (had geen zin een aparte thread te maken om te testen :) gaf ie toch een exception, zonder voorbij dit event te gaan! :?

Ik weet niet of dit alleen bij mij zo is, maar dit vind ik toch vreemd. :(

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

IK gebruikt Delphi 6 Enterprise, en als ik het voorbeeld open en hem laat connecten naar een niet bestaand IP nummer, blockt mij niet (non-blocking) en geeft hij keurig een error via de OnError event van de ClientSocket:
Error connecting to : niet_bestaand_ip_nummer
Error connecting to : 123.123.123.123

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Topicstarter
Juist, de enige manier om het op te lossen is dus Delphi 6.0 Enterprise erop te zetten in plaats van Delphi 5.0 Enterprise? :)

Anders handelt hij het niet af via de OnError.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06:09

Tomatoman

Fulltime prutser

Gebeurt dat connecten niet asynchroon? Met andere woorden: gaat je code niet gewoon door terwijl tegelijkertijd op de achtergrond die verbinding gemaakt wordt? Ik denk het wel.

Een ESocketError krijg je onder andere als je probeert de Address, Host, Port of Service property te veranderen terwijl de verbinding openstaat. Uit Delphi Help:
ESocketError is raised if
- A socket cannot be created.
- A socket cannot be initialized.
- A socket cannot be opened.
- An application tries to change the properties of an already open socket.
- A failure occurs when reading from or writing to a socket.
- A socket cannot be properly closed.
Welke ESocketError.Message krijg je?

Een goede grap mag vrienden kosten.


Verwijderd

Ik heb er nog maar eens wat teksten (borland community enzo) op nagelezen, het zou gewoon moeten werken.

Ik heb dus nog maar een keertje zo'n app. gemaakt, wat scherts mijn verbazing? Het stukje applicatie werkt ineens vlekkeloos, netjes met de OnError-event. :? :)

Verwijderd

Topicstarter
Wat ik heb gedaan is Delphi 5 eraf halen en Delphi 6 installeren. Nu handelt hij het inderdaad netjes af en krijg geen foutmelding meer.
Pagina: 1