Domanda

sto cercando (con un sacco di aiuto da questa comunità) per mettere insieme la mia prima applicazione client / server.

Sto usando Indy 10 e Delphi XE2, ma il sospetto che il mio problema non sta con quelli, ma piuttosto con il modo soockets lavoro (wizardy e nere arti, se mi chiedete).

Perché io spesso colpito i punti di interruzione di eccezioni e passo attraverso il mio codice prima di premere Alt + F2 per battuta d'arresto, le mie prossime corse eccezione spesso colpito "già collegato" e alla fine ottengo "troppe connessioni".

Come posso ordinato questo?

(anche, qualcuno ha una demo che usa try ... except, ratehr di try ... infine, come nella demo Indy?)

È stato utile?

Soluzione

"già collegato" si verifica sul lato client quando si chiama Connect() mentre Connected() ritorna ancora vero. Che di solito si verifica se si disconnette e lasciare i dati non letti nella IOHandler.InputBuffer. Prova a svuotare la InputBuffer prima di ricollegare. Questo è comunemente incontrato, quindi un futuro prossimo aggiornamento per Indy può affrontare la questione.

"Troppe connessioni" significa che si imposta la proprietà MaxConnections del server su un valore diverso da zero positivo e che molti clienti simultanei sono già collegati al server quando un nuovo tentativi client di connettersi. Se non si pensa che si stanno facendo che molte connessioni simultanee, quindi di solito significa che non si sta gestendo i collegamenti in modo corretto nel codice server in modo client disconnessi vengono pulite correttamente. La più comune causa di che sta mettendo gestori di eccezioni nel codice che cattura e rondine eccezioni interne di Indy a se stesso. Se lo fai eccezioni di cattura, assicurarsi di re-raise quelle che derivano da EIdException e lasciare che la maniglia del server internamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top