当前位置: 首页 > news >正文

C# NetworkStream用法

一、注意事项:

  1.  NetworkStream 是稳定的,面向连接的,所以它只适合 TCP 协议的环境下工作所以一旦在 UDP环境中,虽然编译不会报错,但是会跳出异常。
  2. 如果用构造产生NetworkStream的实例,则必须使用连接的Socket,例如:
    TcpClient tcpClient = new TcpClient(serverIp,port);//创建并发起连接
    NetworkStream stream = tcpClient.GetStream();//如果断开连接了则此处会有问题
  3. 如果该NetworkStream拥有对Socket的所有权,则在使用NetworkStream的Close方法时会同时关闭 Socket,否则关闭 NetworkStream 时不会关闭 Socket。以下stream持有socket的所有圈,由于使用了using,当ReadMessage结束后,会销毁stream同时关闭Socket连接。
    TcpClient tcpClient = new TcpClient(serverIp,port);
    NetworkStream stream = tcpClient.GetStream();
    using (stream)
    {ReadMessage(stream);
    }
  4. NetworkStream 使用后不会自动关闭提供的socket,必须使用 NetworkStream 构造函数时指定 Socket 所有权(NetworkStream 的构造函数中设置)。

二、NetworkStream 的属性

  1. CanSeek:用于指示流是否支持查找,它的值始终为false
  2. DataAvailable 指示:要读取的 NetworkStream 上是否有可用的数据,一般来说通过判断这个属性来判断NetworkStream中是否有数据
  3. Length:NetworkStream 不支持使用 Length 属性,强行使用会发生NotSupportedException 异常
  4. Position:NetworkStream 不支持使用 Position 属性,强行使用会发生NotSupportedException 异常。

三、NetworkStream的方法

同样,NetworkStream的方法大致重写或继承了Stream的方法但是以下方法必须注意:
1、int Read(byte[] buffer,int offset,int size)

该方法将数据读入buffer参数并返回成功读取的字节数。如果没有可以读取的数据,则Read方法返回0。Read 操作将读取尽可能多的可用数据,直至达到由size 参数指定的字节数为止。如果远程主机关闭了连接并且已接收到所有可用数据,Read 方法将立即完成并返回零字节。

2、void Write(byte[] buffer, int offset,int size)

Write 方法在指定的 offset 处启动,并将 buffer 内容中的 size 字节发送到网络。Write方法将一直处于阻止状态(可以用异步解决),直到发送了请求的字节数或引发 SocketException 为止。如果收到 SocketException,可以使用SocketException.ErrorCode 属性获取特定的错误代码。

http://www.lryc.cn/news/490026.html

相关文章:

  • 华三预赛从零开始学习笔记(每日编辑,复习完为止)
  • MySQL基础大全(看这一篇足够!!!)
  • [ 应急响应进阶篇-2 ] Linux创建后门并进行应急处置-1:超级用户帐号后门
  • 【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波
  • 数据结构-8.Java. 七大排序算法(上篇)
  • YOLOV5/rknn生成可执行文件部署在RK3568上
  • java http body的格式 ‌application/x-www-form-urlencoded‌不支持文件上传
  • GPU服务器厂家:为什么要选择 GPU 服务器?
  • Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作(三)
  • Idea忽略提交文件、Idea设置文件隐藏、Idea提交时隐藏部分文件、git提交时忽略文件
  • python如何使用spark操作hive
  • 观察者模式和订阅模式
  • 基于ToLua的C#和Lua内存共享方案保姆级教程
  • OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
  • Vue 如何简单更快的对 TypeScript 中接口的理解?应用场景?
  • R语言绘图过程中遇到图例的图块中出现字符“a“的解决方法
  • 视图合并机制解析 | OceanBase查询优化
  • sql注入报错分享(mssql+mysql)
  • PHP 高并发解决方案
  • k8s1.30.0高可用集群部署
  • 多摩川编码器协议及单片机使用
  • Android 网络通信(三)OkHttp实现登入
  • 分享一下arr的意义(c基础)(必看)(牢记)
  • AGENT AI 综述核心速览
  • 基于Java Springboot房屋租赁系统
  • 力扣 LeetCode 701. 二叉搜索树中的插入操作(Day10:二叉树)
  • 猎板科技:PCB 特殊定制领域的卓越引领者
  • centos stream 9安装docker教程
  • 优化旧LabVIEW程序功能的方法
  • 关于安卓模拟器或手机设置了BurpSuite代理和安装证书后仍然抓取不到APP数据包的解决办法