Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Ely88M
    Registrato dal
    Oct 2007
    Messaggi
    281

    [delphi] socket error

    Buongiorno a tutti,
    ho fatto un applicazione in delphi che, tramite il componente idFTP degli indyClients, mi si collega al server controlla se ci sono nuovi aggiornamenti e li scarica.
    Ad uno dei miei clienti, da due giorni, da questo errore
    Socket error 10054 : Connection reset by peer

    qualcuno sa dirmi da cosa può dipendere?

    Grazie

    Ciao

  2. #2
    Che la connessione viene troncata da qualcuno prima che il tuo programma la termini correttamente. Potrebbe essere a causa di una linea adsl con link che va e viene.

  3. #3
    Utente di HTML.it L'avatar di Ely88M
    Registrato dal
    Oct 2007
    Messaggi
    281
    Grazie mille denis!

    quindi è un problema della linea del cliente come sospettavo...

    per fortuna

    Ciao grazie ancora

  4. #4
    ciao..io ho un problema simile...cioè ho un sistema client - server TCP e vorrei gestire la situazione quando si perde la connessione inaspettatamente...
    vorrei semplicemente ke se apparisse un messaggio e ke fosse data al client la possibilità di riprovare a connettersi in seguito...invece per come è ora devo terminare il programma dal task manager....
    dimenticavo..io uso delphi 7 e i componenti server e client tcp di indy 10...
    grazie per l'attenzione

  5. #5
    Lato server devi mollare indy ed usare ICS (non è cross platform, vale solo per Windows) oppure Synapse (è cross platform, ICS però è il migliore).
    Il modo di funzionamento lato server è con un socket bloccante che istanzia un thread per ogni connessione in arrivo.
    Lato Client puoi usare IdTCPClient (che funziona bene) all'interno di un thread che lo pilota in fase di connessione - sconnessione e lettura dei dati in arrivo.

  6. #6
    a me principalmente interessa il lato client...xkè il server sarà poi implementato in c su linux...
    mi spieghi bene come gestire la cosa?per ora nel codice ho eventi solo sui tasti per connettere disconnettere il client,mandare una stringa e uscire...pensavo di usare try except ma la disconnessione del cavo lan o della connessione wireless naturalmente nn fanno parte di nessuno di questi...ho provato a mettere showmessage ecc... su on work if disconnect...ma nn è valso a nulla...
    mi spieghi come fare?scusa...ma nn sono molto pratico di delphi...questa è solo la parte finale di una tesi..infati sono così..==>.....anke se spero in futuro di studiarlo seriamente...
    grazie mille dell'interessamento...

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,459
    Originariamente inviato da denis76
    Lato server devi mollare indy [...]
    Ma perché mai?

    In generale, l'errore Connection reset by peer viene restituito quando il server, a cui si è connessi tramite il relativo client, chiude preventivamente la connessione.

    Vi sono molti server di posta dei provider più conosciuti che si comportano in questo modo, ad esempio chiudendo la connessione quando si invia un comando QUIT senza attendere che sia il client a farlo esplicitamente (poiché molti client potrebbero evitarlo, lasciando così risorse allocate sul server per la gestione di un client che non necessità più di inviare richieste).

    In generale, posto che vi sia una gestione delle eccezioni ben fatta, si tratta di un'errore che può essere trascurato... ovviamente, solo se viene sollevato appena prima di una disconnessione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  8. #8
    cerco di spiegarmi meglio...io voglio rendere l'applicazione sicura...quindi vorrei ke in caso di forzata disconnessione ke (simulo staccando il cavo lan) il client leggesse un messagio di errore ma ke volendo dopo un certo tempo possa provare a riconnettersi manualmente....invece per come sono le cose ora nel mio programma mi compare quell'errore sempre....e nn posso fare niente se nn terminare il programma da task manager...

  9. #9
    Alka, ti sfido! (So che sei bravo su queste cose..)
    Crea un nuovo form, mettici il componete IdTCPServer, apri il socket e mettilo in ascolto.
    Fatto ciò collegati con uno o due telnet al socket appena aperto, dopodiché chiudi il form (chiaramente il form deve sconnettere le connessioni attive.)
    Prova una decina di volte e fammi sapere quante volte sarai costretto a chiudere il form con il taskmanager.

    Lato client
    codice:
    ClientSocket:= TIdTcpClient.Create(Self);
        ClientSocket.Host:= 'cicciopasticcio.dyndns.org';
        ClientSocket.Port:= 3001;
        ClientSocket.Connect;
        TMLog.Lines.Append('Connesso con '+ ClientSocket.Host+ IntToStr(ClientSocket.Port));
    
        ThLeggiSocket.Create();
    
        ClientSocket.IOHandler.WriteLn('cur'+ GetCurrentDir);
    Poi io uso un thread per leggere dal socket (sempre lato client)


    codice:
    procedure ThLeggiSocket.Execute;
    begin
      try
        while MainForm.ClientSocket.IOHandler.Connected do begin
          try
            RigaIn:= MainForm.ClientSocket.IOHandler.ReadLn();

    Se usi il thread ricordati che devi sincronizzarlo con il main form.

  10. #10
    scusate la grande ignoranza...ma nn ho ben capito come risolvere il problema...a volte mi sento proprio deficente...

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.