Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Delphi], Indy Server.

    Quando lancio il comando

    IdTcpServer.Active:= false;

    se ci sono delle connessioni in corso il programma si pianta. Come posso fare per abbattere tutte le connessioni in corso?



    Grazie mille, Denis.

  2. #2
    Come posso fare per abbattere tutte le connessioni in corso?
    Quale versione di Indy usi?

  3. #3

  4. #4
    Prova con una cosa del genere prima di disattivare il server:

    codice:
    if IndyTCPServer.Contexts <> nil then
        begin
            with IndyTCPServer.Contexts.LockList do
            try
                for i := 0 to Count - 1 do TIdContext(Items[i]).Connection.Disconnect(False);
            finally
                IndyTCPServer.Contexts.UnlockList;
            end;
        end;

  5. #5
    Le connessioni vengono abbattute correttamente ma poi alla riga

    IdTcpServer.Active:= false;

    il programma si pianta.

  6. #6
    IdTcpServer.Active:= false; il programma si pianta.
    Purtroppo non è un'informazione sufficiente per individuare la causa del problema, potrebbe trattarsi in egual misura di un bug molto subdolo oppure di un errore macroscopico. :master:

  7. #7
    Nella finestra Thread Id vedo che quando apro il socket viene instanziato il Thread

    IdTcpServer Listener

    il quale a sua volta quando arriva una connessione instanzia il Thread

    IdTcpServerScheduler

    uno per ogni connessione entrante.
    Con la funzione da te suggerita vengono terminate le connessioni ma l'oggetto ..Scheduler rimane attivo. Forse la soluzione sta nel riuscire ad abbatterlo. Hai qualche idea?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Siamo sicuri che il problema non sia dovuto a codice inserito "a contorno" dei componenti, e non ai componenti stessi?

    Uso la medesima versione di Indy, ed ho un programma che apre due server di tipo POP3 e SMTP, senza riscontrare questo problema.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Ho preparato un programmino che non fa nulla, solo per provare il componete TIdTcpServer.

    Prova a creare un form con un componente TIdTcpServer, attivare il socket, scrivere qualcosa in OnExecute ('TMLog.Lines.Add('IdTCPServerExecute');'.. quello che vuoi) e poi a collegarti con HyperTerminal.

    Prova ora a chiudere il programma e fammi sapere cosa succede. (Con telnet il programma si chiude senza problemi.)

    Prova inoltre a riaprire il socket, collegarti in telnet da un secondo pc e staccare il cavo di rete del server. Fammi sapere se riesci a gestire l'errore 10054.

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da denis76
    Prova a creare un form con un componente TIdTcpServer[...]
    Ottimo caso di test riproducibile. Appena avrò un po' di tempo libero (merce rara in questo periodo) faccio qualche prova.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

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.