Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - disconnessione chat client/server
Forum - C# / VB.NET - disconnessione chat client/server

Avatar
jackk87 (Normal User)
Newbie


Messaggi: 7
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 9:29
Venerdì, 16/01/2009
Buongiorno,
ho creato un programma di chat su due progetti diversi con TCPClient e TCPListener.
L'invio e la ricezione dei dati è gestita da un timer adesso ho un problema cioè se il client clicca sul pulsante disconnetti come faccio a chiudere tutte le connessioni e a far capire al server che il client si è disconnesso e che si deve mettere in ascolto di nuovo?
ho provato con:

Codice sorgente - presumibilmente Plain Text

  1. TCPClient.Client.Disconnect(true)
  2. NetStr.Close()
  3. TCPClient.Close()



ma mi va il loop il programma cioè si blocca...mentre così:

Codice sorgente - presumibilmente Plain Text

  1. NetStr.Close()
  2. TCPClient.Close()



si disconnette però non mi permette di riconnettermi di nuovo quindi dovrei chiudere e riaprire il programma e cmq rimane sempre il problema che il server non si accorge che il client si è disconnesso...qualcuno può aiutarmi?grazie

Ultima modifica effettuata da jackk87 il 16/01/2009 alle 9:30
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:01
Venerdì, 16/01/2009
Devi inviare una stringa che comunichi la chiusura al server, poi disconnettere e chiudere il client, quindi reinizializzare il listener (una volta che il server ha ricevuto il messaggio di chiusura).

PM Quote
Avatar
jackk87 (Normal User)
Newbie


Messaggi: 7
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 12:21
Sabato, 17/01/2009
Testo quotato

Postato originariamente da Il Totem:

Devi inviare una stringa che comunichi la chiusura al server, poi disconnettere e chiudere il client, quindi reinizializzare il listener (una volta che il server ha ricevuto il messaggio di chiusura).



ok ci provo...però come faccio a chiudere il client per poi riconnettermi di nuovo?se lo chiudo così:
Codice sorgente - presumibilmente Plain Text

  1. NetStr.Close()
  2. TCPClient.Close()


non mi permette di riconnettermi di nuovo e devo per forza chiudere il programma grazie

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:26
Sabato, 17/01/2009
Presumo che quello sia il codice del client (poiché nel server la variabile che contiene l'oggetto TcpClient viene reinizializzata per ogni nuova connessione). Per prima cosa, prova ad utilizzare l'overload di Disconnect che accetta un parametro booleano (Disconnect(True)): questo dovrebbe consentire il riutilizzo del socket. Se non funziona, puoi istanziare un nuovo oggetto tcp client.

PM Quote
Avatar
jackk87 (Normal User)
Newbie


Messaggi: 7
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 10:29
Martedì, 20/01/2009
Testo quotato

Postato originariamente da Il Totem:

Presumo che quello sia il codice del client (poiché nel server la variabile che contiene l'oggetto TcpClient viene reinizializzata per ogni nuova connessione). Per prima cosa, prova ad utilizzare l'overload di Disconnect che accetta un parametro booleano (Disconnect(True)): questo dovrebbe consentire il riutilizzo del socket. Se non funziona, puoi istanziare un nuovo oggetto tcp client.



ciao ho provato così quando mi si disconnette il client con il server il listener viene aperto e si riconnette bene...mentre con il client se provo a disconnetterlo così:
Codice sorgente - presumibilmente Plain Text

  1. TCPClient.Client.Disconnect(true)
  2. NetStr.Close()
  3. TCPClient.Close()


mi va in loop il programma cioè si blocca e devo per forza chiuderlo adesso mi chiedo come faccio ad istanziare un nuovo oggetto tcpclient?cioè se alla disconnessione dichiaro una nuova variabile client ma non posso dichiararla con lo stesso nome help me pls  :d

PM Quote
Avatar
jackk87 (Normal User)
Newbie


Messaggi: 7
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 10:57
Martedì, 20/01/2009
ho risolto bastava inizializzare il cliet nel pusante connetti come nell'esempio:
Codice sorgente - presumibilmente VB.NET

  1. Private client As System.Net.Sockets.TcpClient    
  2.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs Handles Button1.Click        
  3.         client = New System.Net.Sockets.TcpClient        
  4.         client.Connect("localhost", 5044)    
  5.     End Sub    
  6.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click        
  7.        client.Client.Close()    
  8.     End Sub



cmq grazie a tutti per l'aiuto :k:

Ultima modifica effettuata da jackk87 il 20/01/2009 alle 10:58
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:55
Martedì, 20/01/2009
Inizializzare = istanziare <> dichiarare. :D

PM Quote