|
在网络编程中,常用的流有网流、文本流、文件流

在网络编程中,常用的流有网流、文本流、文件流。 网络流用于传输数流; 文本流用于读写文本; 文件流用于读写文件;
1.网络流:NetworkStream类提供用于网络访问的基础流,NetworkStream实现了通过网络套接字发送和接收数据的标准.Net框架流机制。NetworkStream支持数据流 同步和异步访问。但不支持网络数据流的随机访问。CanSeek属性总为False:读取Position属性或者调用CanSeek方法将引发NotSupportedExceiption异常。 NetworkStream类的构造方法一下几种 public NetworkStream(Socket socket) 参数为套接字.该方法的用法如下 NetworkStream newStream=new NetworkStream(mySock); public NetworkStream(Socket scoket,bool ownsSocket); 第二个参数:创建对指定套接字具有读/写权限的NetworkStream对象 NetworkStream newStream=new NetStream(mySocket,true); public NetworkStream(Socket socket,FileAccess access) 此方法用于创建不拥有套接字也可以控制NetworkStream对象访问权限的NetworkStream对象。 NetworkStream newStream=new NetworkStream(mysocket,System.IO.FileAcess.Read) public NetworkStream(Socket socket,FileAcess access,bool bool ownsSocket) 用于创建可拥有套接字对象的附加访问权限的F网络流对象。 NetworkStream newStream=new NetworkStream(Socket socket,System.FileAccess.Read,ture);
NetworkStream类的主要属性 CanRead 获取一个值,该值指示当前流是否支持读取 CanSeek 获取一个值,该值指示当前流是否支持查找。该属性总是返回false CanWrite 获取一个值,该值指示当前流是否写入 DataAvailable 获取一个值,该值指示是否可以在流上读取数据 Length 流上可用数据的长度。此属性始终引发NotSupportedException Position 获取或设置流中的当前位置.此属性始终引发NotSupportException;
NetworkStream类最常用的方法 Read()用于读取数据,该方法的定义用下 public override int Read(int byte[] buffer,int offset,int size) 用法如下 NetworkStream newStream =new NetworkStream(mySocket) byte[] myByte=new Byte[1024]; newStream.Read(myByte,0,myByte.Length); newStream.Flush(); Flush方法定义如下 public override void Flush(); Write()用于向流中写入数据 该方法定义如下 public override int Read(int byte[] buffer,int offset,int size) 用法如下 NetWorkStream newStream=new NetworkStream(mySocket); byte[] myByte=new byte[1034]; newStream.Write(myByte,0,myByte.Length); newSteam.Flush();
文本流 顾名思义文本流用于文本的读写。要谈文本首先了解是文本的编码。在网络编程中,最常用的是ASCII、UTF8、和BIgEndianUnicode码 其中ASCII码最常用,几乎所有的协议都支持。不过SMTP和POP3协议使用utf8编码,但也支持ASCII码,BigEndianUnicode码是双字节码,一般协议不用 因为双字节解码比较麻烦,容易出错。UTF8和BigEndianUnicode编码支持汉字传输
向文件写文件流 1.向文件中写入文本数据,并且新数据代替旧数据 StreamWriter sw=null; sw=new StreamWriter(@"d:\test.txt",false,System.Text.Encoding.UTF8); sw.Write("aaaaaaaaa"); sw.Close(); 2.向文件中写入文本数据,把新数据放在旧数据的后面 StreamWriter sw=null; sw=new StreamWriter(@"d:\test.txt",true,System.Text.Encoding.UTF8); sw.Write("bbbbbbbbbb"); sw.Close();
向网络写入文本 string str="aaaaaaaaaaaaaaaaaaaaaa"; byte[] myByte=System.Text.Encoding.UTF8.GetBytes(str); NetworkStream netStream= new NetworkStream(mySocket); netStream.Write(myByte,0,myByte.Lenth);
从文件读取文本 StreamReader sr=null; sr=new StreamReader(@"d:\test.txt",system.Text.Encoding.UTF8); string mystr=sr.ReadToEnd(); sr.Close();
从网络读取文件 string str="aaaaaaaaaaaa"; byte[] myByte =System.Text.Encoding.UTF8.GetBytes(str); NetworkStream netStream=new NetwrokStream(mySocket); netStream.Read(myByte,0,myByte.Length);
文件流 用于读写非文本的文件。文件类型可以是各种各样的,无论是文本文件、还是图片文件、压缩文件、可执行文件等,都可以用文件流 来实现读写功能。 将网络流数据写入文件 FileStream fileStream=new FileStream(path,FileMode.OpenOrCreate,FileAccess.Write); int readNumber=0; byte[] bye=new byte[8]; while((readNumber=stream.Read(bye,0,8))>0) { fileStream.Write(bye,0,readNumber); fileStream.Flush(); } fileStream.Close();
读文件并写入网络流 FileStream fileStream =new FileStream(path,FileMode.Open,FileAcess.Read); int number; byte[] bb=new byte[8]; NetworkStream stream=new NetwrokStream(newclient); while((number=fileStream.Read(bb,0,8))!=0) { stream.Write(bb,0,8); stream.Flush(); } filestream.close();
北大青鸟-南京中博http://www.njaccp.com
|