Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Socket timeout
lunedì 25 giugno 2007 - 15.23
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
JohnAsh
Profilo
| Junior Member
50
messaggi | Data Invio:
lun 25 giu 2007 - 15:23
Ciao a tutti,
sto sviluppando un'applicazione server multi-thread in VC++ che implementa delle basilari funzioni di messaggistica. Tutto funziona correttamente, i clients riescono ad effettuare la connessione, a ricevere l'elenco degli altri clients connessi e a scambiare messaggi tra di loro.
Il server rimane attivo 24h su 24 e (salvo crash) non viene mai terminato. Capita spesso che anche alcuni clients rimangano connessi praticamente 24h su 24 .. Il problema che ho è il seguente:
Dopo un pò di tempo in cui il client è connesso al server (non sono riuscito ad identificare più precisamente quanto - sicuramente più di una decina di minuti), la connessione viene persa ma a me non giunge alcun errore, dalla parte client continua ad essere tutto come se la connessione fosse attiva. Mentre sul server, controllando un file di log che ho fatto salvare appositamente, mi risulta che il client è stato disconnesso per: Connessione interrotta forzatamente dall'host remoto (ricavato dalla gestione della SocketException).
Il client all'avvio, predispone un backgroundworker e lo avvia, il backgroundworker resta in esecuzione finchè il socket con il server è aperto ( while (sock->Connected) ) e nel momento in cui termina il suo lavoro ho implementato nella relativa funzione, il codice per farmi comparire a video una messagebox che mi segnali la disconnessione.
Le mie domande, alle quali spero ci sia qualcuno più competente di me che possa rispondere, sono:
- Com'è possibile che il server chiuda la connessione con il client ed al client non venga recapitata alcuna notifica? Quantomeno la proprietà "Connected" della classe socket dovrebbe assumere il valore falso e farmi dunque uscire dal while nel backgroundworker, ottenendo così l'avviso di disconnessione - cosa che non accade assolutamente.
- Mettendo caso che fosse il server ad interrompere la connessione, perchè lo fa? Esiste una sorta di timeout per le connessioni TCP?
- Ho provato a connettermi tramite telnet (da una macchina con FreeBSD) e la connessione sembra (almeno per ora) rimanere attiva per più tempo rispetto a quanto ne rimane sul client Windows. Ogni 10 minuti circa invio un comando al server per avere la lista dei client connessi e riesco a ricevere la risposta correttamente (quindi la connessione è aperta!). C'è del codice errato nel mio client Windows che interrompe la connessione quando non dovrebbe?
Spero che ci sia qualcuno in grado di aiutarmi .. sono due settimane che cerco di capire dov'è il problema .. senza risultati
Grazie in anticipo
Saluti!
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !