流(stream)是对串行传输的数据的一种抽象表示,底层的设备可以是文件、外部设备、主存、网络套接字等等。

  流有三种基本的操作:写入、读取和查找。

  如果数据从内存缓冲区传输到外部源,这样的流叫作“写入流”。

  如果数据从外部源传输到内存缓冲区,这样的流叫作“读取流”。

  在网络上传输数据时,试用的是网络流(NetworkStream)。网络流的意思是数据在网络的各个位置之间是以连续的形式传输的。为了处理这种流,C#在System.Net.Socket命名空间中提供了一个专门的NetworkStream类,用于通过网络套接字发送和接受数据。

  NetworkStream类支持对网络数据的同步或异步访问,它可以被是为在数据来源端和接收端之间架设了一个数据通道,这样我们读取和写入数据就可以针对这个通道来进行。

  对于NetworkStream流,写入操作是指从来源端内存缓冲区到网络上的数据传输;读取操作是从网络上到接受端内存缓冲区(如字节数组)的数据传输。如图所示。

图 NetworkStream流的数据传输

  构造NetworkStream对象的常用形式为

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
NetWorkStream networkStream = new NetworkStream(socket);

  一旦构造了一个NetworkStream对象,就不需要Socket对象了。也就是说,再关闭网络连接之前就一直试用NetworkStream对象发送和接受网络数据。表列出了NetworkStream类提供的常用属性。

表 NetworkStream类常用属性。

属性 说明
CanRead 指示NetworkStream是否支持读操作,默认值为True
CanWrite 指示NetworkStream是否支持写操作,默认值为True
CanSeek 指示NetworkStream流是否支持查找,该属性总是返回False
DataAvailable 指示NetworkStream上是否有可用的数据,有则为真
Position 获取或设置流中的当前位置,此属性始终引发NotSupportedException
Readable 指示NetworkStream流是否可读,为真时可读;假时不可读
Writeable 指示NetworkStream流是否可写,为真时可写;假时不可写

  在这个表中,比较常用的一个属性就是DataAvailable,通过这个属性,可以迅速查看在缓冲区中是否有数据等待读出。

  注意:网络流没有当前位置的概念,因此不支持查找和对数据流的随机访问,相应属性CanSeek 始终返回false , 而读取Position 属性和调用Seek 方法时, 都将引发NotSupportedException 异常。

  表  列出了NetworkStream 类的常用方法

表 NetworkStream类的常用方法

方法 说明
BeginRead方法 从NetworkStream流开始异步读取
BeginWrite方法 开始向NetworkStream流异步写入
EndRead方法 结束对一个NetworkStream流的异步读取
EndWrite方法 结束向一个NetworkStream流的异步写入
Read方法 从NetworkStream流中读取数据
Write方法 向NetworkStream流中写入数据
ReadByte方法 从NetworkStream流中读取一个字节的数据
WriteByte方法 向NetworkStream流中写入一个字节的数据
Flush方法 从NetworkStream流中取走所有数据
Close方法 关闭NetworkStream对象
Dispose方法 释放NetworkStream占用的资源
Seek方法 查找NetworkStream流的当前位置,此方法将引发NotSupportedException

  网络数据传输完成后,不要忘记用Close 方法关闭NetworkStream 对象。

C# 网络流的更多相关文章

  1. plain framework 1 网络流 缓存数据详解

    网络流是什么?为什么网络流中需要存在缓存数据?为什么PF中要采用缓存网络数据的机制?带着这几个疑问,让我们好好详细的了解一下在网络数据交互中我们容易忽视以及薄弱的一块.该部分为PF现有的网络流模型,但 ...

  2. 网络流模板 NetworkFlow

    身边的小伙伴们都在愉快地刷网络流,我也来写一发模板好了. Network Flow - Maximum Flow Time Limit : 1 sec, Memory Limit : 65536 KB ...

  3. COGS732. [网络流24题] 试题库

    «问题描述:假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法.«编程任务: ...

  4. ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)

    //有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...

  5. BZOJ 3144 [Hnoi2013]切糕 ——网络流

    [题目分析] 网络流好题! 从割的方面来考虑问题往往会得到简化. 当割掉i,j,k时,必定附近的要割在k-D到k+D上. 所以只需要建两条inf的边来强制,如果割不掉强制范围内的时候,原来的边一定会换 ...

  6. bzoj3572又TM是网络流

    = =我承认我写网络流写疯了 = =我承认前面几篇博文都是扯淡,我写的是垃圾dinic(根本不叫dinic) = =我承认这道题我调了半天 = =我承认我这道题一开始是T的,后来换上真正的dinic才 ...

  7. hdu3549还是网络流

    最后一次训练模板(比较熟练了) 接下来训练网络流的建图 #include <cstdio> #define INF 2147483647 int n,m,ans,x,y,z,M,h,t,T ...

  8. 二分图&网络流&最小割等问题的总结

    二分图基础: 最大匹配:匈牙利算法 最小点覆盖=最大匹配 最小边覆盖=总节点数-最大匹配 最大独立集=点数-最大匹配 网络流: 技巧: 1.拆点为边,即一个点有限制,可将其转化为边 BZOJ1066, ...

  9. COGS743. [网络流24题] 最长k可重区间集

    743. [网络流24题] 最长k可重区间集 ★★★   输入文件:interv.in   输出文件:interv.out   简单对比时间限制:1 s   内存限制:128 MB «问题描述: «编 ...

  10. COGS439. [网络流24题] 软件补丁

    [问题描述] 对于一个软件公司来说,在发行一个新软件之后,可以说已经完成了工作.但是实际上,许多软件公司在发行一个新产品之后,还经常发送补丁程序,修改原产品中的错误(当然,有些补丁是要收费的). 如某 ...

随机推荐

  1. 【Linux】大于2T的磁盘怎么分区?

    环境CentOS7.1 2.9t磁盘 fdisk 只能分区小于2t的磁盘,大于2t的话,就要用到parted 1,将磁盘上原有的分区删除掉: 进入:#parted   /dev/sdb 查看:(par ...

  2. BAPI_PO_CHANGE

    这两天用BAPI更改采购订单,遇到了一些问题,最后调试解决了.记录如下吧.要修改的是采购订单的物料号和批次,在网上看到其它人写过关于 BAPI_PO_CHANGE的用法,但是具体问题还要具体分析啊. ...

  3. python-列表包字典-根据字典的某一个键的值来进行排序

    python-列表包字典-根据字典的某一个键的值来进行排序 列表包字典的数据结构 要实现按照字典中的某一个键所对应的值进行排序 有两种办法 方法一,使用列表的sort方法 由小到大排 列表.sort( ...

  4. 控制tomcat日志文件的输出到catalina.out

    在catalina.sh中直接把下面的内容注释掉即可:

  5. TekRADIUS5.5安装教程

    1.下载地址:https://www.kaplansoft.com/TekRADIUS/release/tekradius.zip 2.解压安装,双击一步默认安装下来就是了 3.配置连接数据库: 4. ...

  6. Maven 中央仓库

    概述 当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载.首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它 ...

  7. CobalStrike 4.0 生成后门几种方式 及 主机上线后基础操作

    出品|MS08067实验室(www.ms08067.com) 本文作者:BlackCat(Ms08067内网安全小组成员) CobalStrike 4.0 生成后门几种方式 步骤:Attacks-〉P ...

  8. 页面切换提速30%!京东商城APP首屏耗时监控及优化实践

    https://mp.weixin.qq.com/s/vIG_x1MWC33HKV1GxalVHg 原创 平台研发朱跃棕等 京东零售技术 2020-12-09 网络接口请求可以从接口结构合理性及多接口 ...

  9. gRPC设计动机和原则

    https://mp.weixin.qq.com/s/NMIIa0W722zo_AxCqASc0g TiDB 与 gRPC 的那点事儿 黄东旭 PingCAP 2017-08-10   gRPC 背景 ...

  10. Page (computer memory) Memory segmentation Page table 虚拟地址到物理地址的转换

    A page, memory page, or virtual page is a fixed-length contiguous block of virtual memory, described ...