2013-07-16 233 views
2

當我建立我的服務器通過TCP套接字我使用下面的代碼進行通信的連接:現在關閉Socket還是應該關閉流?

Socket socket = ... 

NetworkStream ns = new NetworkStream(socket); 

StreamReader sr = new StreamReader(ns); 
StreamWriter sw = new StreamWriter(ns); 

...是不夠的,只是做socket.Close();還是好做:

sw.Close(); 
sr.Close(); 
ns.Close(); 
socket.Close(); 

有誰知道什麼是清理/關閉/釋放套接字最合適的方法?

而且,我應該對上面定義的每個變量做一個Dispose()嗎?

回答

2

試過了什麼?

NetworkStream.Close() reference

關閉與當前流相關聯的當前流並釋放任何資源(如套接字和文件句柄)。而不是調用這個方法,確保流正確處理。

所以:

using (NetworkStream ns = new NetworkStream(socket)) 
{ 
    // Your code 
} 
+1

從來沒有想到這一點。謝謝CodeCaster, – Eric

0

你應該關閉輸出流。這將刷新它,並關閉另一個流和套接字。不要自己關閉它們,或者必須在輸出流之後關閉它們。否則,您可能會丟失數據。