Oppure

Loading
16/01/09 8:29
jackk87
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:

TCPClient.Client.Disconnect(true)
NetStr.Close()
TCPClient.Close()


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

NetStr.Close()
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 16/01/09 8:30
aaa
16/01/09 17:01
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).
aaa
17/01/09 11:21
jackk87
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ì:
NetStr.Close() 
TCPClient.Close() 

non mi permette di riconnettermi di nuovo e devo per forza chiudere il programma grazie
aaa
17/01/09 14:26
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.
aaa
20/01/09 9:29
jackk87
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ì:
TCPClient.Client.Disconnect(true) 
NetStr.Close() 
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
aaa
20/01/09 9:57
jackk87
ho risolto bastava inizializzare il cliet nel pusante connetti come nell'esempio:
Private client As System.Net.Sockets.TcpClient     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs Handles Button1.Click        
        client = New System.Net.Sockets.TcpClient        
        client.Connect("localhost", 5044)    
    End Sub     
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click        
       client.Client.Close()    
    End Sub 


cmq grazie a tutti per l'aiuto :k:
Ultima modifica effettuata da jackk87 20/01/09 9:58
aaa
20/01/09 15:55
Il Totem
Inizializzare = istanziare <> dichiarare. :D
aaa