网络编程中的网络流,文本流,文件流(中软国际 Seventh Day)

                                                      网络流、文本流、文件流

 

在网络编程中,常用的流有网流、文本流、文件流。
网络流用于传输数流;
文本流用于读写文本;
文件流用于读写文件;

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();

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值