Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Gestione errori Socket

  1. #1
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802

    Gestione errori Socket

    Ciao a tutti,
    l'applicazione che sto sviluppando contiene una connessione con l'uso di TIdHTTP ma quando inserisco un indirizzo ip errato, il software rimane "appeso" per parecchi secondi, come se fosse in standby, per poi restituirmi l'errore Socket time out # 10061.
    Io vorrei evitare quel periodo di standby in modo da visualizzare in brevissimo tempo un messaggio di errore e in caso fosse impossibile accorciare questo breve periodo, almeno personalizzare il messaggio di errore.

    Ho provato usando il codice

    try
    IdHTTP1.Connect(ip1.Text+'.'+ip2.Text+'.'+ip3.Text +'.'+ip4.Text, 80);
    except
    on EidSocketError do
    begin
    Beep;
    ShowMessage ('Errore!');
    end;
    end;

    ma mi dice sempre che EidSocketError non è dichiarato.

    Se invece inserisco

    try
    IdHTTP1.Connect(ip1.Text+'.'+ip2.Text+'.'+ip3.Text +'.'+ip4.Text, 80);
    except
    on Exception do
    begin
    Beep;
    ShowMessage ('Errore!');
    end;
    end;

    Non mi da errori ma non funziona.

    Come posso gestire questa cosa?
    Grazie mille.
    www.beppegrillo.it
    Il blog di Beppe!!

  2. #2
    prova le librerie synapser, sono semplicissime da implementare.

    pe fare quello che vuoi fare tu uso la funzione

    HTTPGetText(dominio : string; risultato:TStringList) : boolean;

    che ritorna true se il collegamento è ok e in risultato la risposta del server,
    senza neanche scomodare una classe

    ciao
    sergio

  3. #3
    scusa, senza r finale

    http://synapse.ararat.cz/

    ciao sergio

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Re: Gestione errori Socket

    Originariamente inviato da colde
    Io vorrei evitare quel periodo di standby [...]
    Ho provato usando il codice
    Non c'è alcuna attinenza tra la gestione dell'errore e la riduzione del tempo di timeout, che è gestito internamente ai componenti Indy. Gestendo l'eccezione, al massimo puoi eseguire codice a seguito di un errore di timeout, che avverrà comunque quando si verificherà sempre un timeout. Hai provato a sbirciare tra le proprietà del componente TIdHTTP per vedere se c'è un parametro che potrebbe, intuitivamente, ricondurre ad un tempo di timeout personalizzabile?

    Per il tipo di eccezione non trovato, probabilmente hai dimenticato di includere la unit che contiene quel tipo nella clausola uses.

    Ce l'hai la documentazione di Indy sottomano, vero?

    Originariamente inviato da mondobimbi
    prova le librerie synapser, sono semplicissime da implementare.
    [...]
    che ritorna true se il collegamento è ok e in risultato la risposta del server,
    senza neanche scomodare una classe
    In generale, non ritengo "scomodare classi" un problema.

    A parte questo, sarà anche semplice da usare, ma il codice da modificare per sostituire i componenti utilizzati con quella libreria richiede senz'altro un certo quantitativo di tempo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5

    Re: Re: Gestione errori Socket

    Originariamente inviato da alka

    In generale, non ritengo "scomodare classi" un problema.

    A parte questo, sarà anche semplice da usare, ma il codice da modificare per sostituire i componenti utilizzati con quella libreria richiede senz'altro un certo quantitativo di tempo.
    bè, una classe va dichiarata e istanziata, non tanto lavoro ma lavoro.
    Quella che suggerivo è una funzione da usare tal quale, ne uso una simile per le richieste ftp, dacci una occhiatina e vedrai che ti convinci. Le librerie, inoltre, ritengo che in generale siano superiori a quelle di Indy (io ho usato quelle in D7 e K3).

    ciao
    sergio

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Re: Re: Re: Gestione errori Socket

    Originariamente inviato da mondobimbi
    bè, una classe va dichiarata e istanziata, non tanto lavoro ma lavoro.
    E' un'istruzione...
    A parte questo, non c'è bisogno di istanziare nulla, considerando che si tratta sostanzialmente di componenti che si possono appoggiare su Form e Data Module, condividendoli all'occorrenza e immagazzinando al loro interno valori riutilizzabili per le proprietà.

    Ma il discorso è un altro: avendo sviluppato un programma con Indy, non c'è alcun vantaggio nel buttare via tutto per adottare una funzione al posto di un metodo di un componente che si trova sul Form, senza contare che il problema è nell'uso corretto dei parametri nelle richieste, e non nel componente stesso, che è stato collaudato in tutti questi anni.

    Originariamente inviato da mondobimbi
    Quella che suggerivo è una funzione da usare tal quale, ne uso una simile per le richieste ftp, dacci una occhiatina e vedrai che ti convinci. Le librerie, inoltre, ritengo che in generale siano superiori a quelle di Indy (io ho usato quelle in D7 e K3).
    "Superiori" è un termine generico. Dipende dall'aspetto che si esamina.
    Se si parla di possibilità e opportunità, considerando che le librerie contengono meno della metà delle implementazioni TCP presenti in Indy, la "superiorità" è un po' difficile da sostenere...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7

    Re: Re: Re: Re: Gestione errori Socket

    Originariamente inviato da alka
    "Superiori" è un termine generico. Dipende dall'aspetto che si esamina.
    Se si parla di possibilità e opportunità, considerando che le librerie contengono meno della metà delle implementazioni TCP presenti in Indy, la "superiorità" è un po' difficile da sostenere...
    ... certo, il mio "superiore" è soggettivo e si riferisce a qualche client e pochi server, e, per questi utilizzi, ho trovato più facilità di utilizzo.
    La migrazione a synapse è stata poi per me quasi obbligatoria perchè ho iniziato a sviluppare applicazioni web in free pascal (spesso lato server dove utilizzo componenti non visuali).
    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.