Ho un oggetto TcpClient che invia alcuni dati al server, utilizzando il suo NetworkStream.Write() sottostante. Perciò, ho:Qual è il modo corretto per chiudere una connessione TCP
TcpClient server = new TcpClient(serverName, 50001);
/* ... */
NetworkStream stream = server.GetStream();
Ora, quando si preme un tasto, la connessione deve chiudere. Qual è il modo giusto per chiudere la connessione? I documenti MSDN dicono che chiudere il TcpClient (con .Close()) non chiude di fatto il socket, ma solo le risorse di TcpClient (almeno così ho capito i documenti).
Quindi, farebbe il prossimo codice chiudere correttamente la connessione?
stream.Close();
server.Close();
Basta questo, o dovrei primo controllo (in qualche modo) se il flusso (o server) possono essere chiuse (nel caso in cui la connessione è semiaperta o qualcosa del genere) ...
Ancora più , NetworkStream.Close()
MSDN doc afferma che rilascia risorse (anche socket), quindi forse chiudere il flusso sarebbe sufficiente, supponendo che prevedo di usare il TcpClient dopo quel punto.
Qual è l'approccio giusto?
Credo che mi fidavo di IntelliSense troppo. Il popup per TcpClient.Close() afferma questo: "Disporre questa istanza System.Net.Sockets.TcpClient senza chiudere la connessione sottostante." Cosa strana. Grazie per la risposta però. –
Infatti, questo è ciò che i 3.0 documenti (http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.close(VS.85).aspx) dicono nella prima frase ... ma poi la terza frase dice che * fa * chiude Socket e NetworkStream. I 3.5 documenti (che ho collegato in precedenza) sono coerenti. Sospetto che la riga nei documenti 3.0 sia stata un errore. – Joren