數據流(Stream)是一種抽象表示,代表存儲和檢索數據的串行設備,底層的設置可以是文件、外部設置、主存、網絡套接字等。通過該抽象化,不同的設備可以用相同的流來進行訪問,如果某些代碼可用於從一個文件輸入流中讀取數據數據,那麼也可以用類似的代碼從一個網絡輸入流中讀取數據。
使用數據流的好處是可以隱藏不同操作系統以及底層硬件的差異,為程序員提供統一的編程接口。
.NET Framework提供了一組用於在各種類型上執行操作的類,Stream是其中的主類,所有其祂的與流相關的類都由這個抽象類派生而來。流有三種基本的操作:寫入、讀取和查找。
利用StreamReader和StreamWriter,可以對文本進行讀寫操作﹔利用BinaryReader和BinaryWriter,可以讀寫對二進制信息﹔用System.IO.MemoryStream可以讀寫內存數據流﹔用System.Net.Sockets.NetworkStream可以發送和接收網絡數據。
在網絡編程中,使用的是網絡流(NetworkStream)。在網絡上傳輸數據時,數據在各個位置之間以連續或者數據流的形式傳輸的。為了處理這種流,.NET中引入了一個特殊的類-------System.Net.Sockets名稱空間中的NetworkStream,該類用於在阻塞模式下通過網絡套接字發送和接收數據。
構造NetworkStream對象的常用形式為:
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
NetWorkStream netstream=new NetWorkStream(socket);
一旦構造了NetWorkStream對象,就不需要使用socket對象了。也就是說,關閉連接前就一直使用NetWorkStream對象發送和接收網絡數據,NetWorkStream類提供的屬性。
NetWorkStream類提供的屬性
CanRead 如果NetworkStream支持讀操作,該屬性值為真
CanSeek NetworkStream不支持隨機訪問,所以總為假
CanWrite 如果支持寫操作,則為真
DataAvailable 有數據可讀時為真
NetWorkStream常用方法
BeginRead() 啟動一個異步NetworkStream讀操作
BeginWrite() 啟動一個異理NetworkStream寫操作
Close() 關閉NetworkStream對象
EndRead() 結束一個異步讀操作
EndWrite() 結束一個異步寫操作
Flush() 從NetworkStream中取出所有數據
Read() 從NetworkStream中讀取數據
ReadByte() 從NetworkStream中讀取一個字節的數據
Write() 從NetworkStream中寫數據
WriteByte() 從NetworkStream中寫一個字節的數據
在網絡數據傳輸完成後,不要忘記Close關閉NetworkStream對象。