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.mzph.cn/bicheng/61700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多摩川编码器协议及单片机使用

参考: https://blog.csdn.net/qq_28149763/article/details/132718177 https://mp.weixin.qq.com/s/H4XoR1LZSMH6AxsjZuOw6g 1、多摩川编码器协议 多摩川数据通讯是基于485 硬件接口标准NRZ 协议,通讯波特率为2.5Mbps 的串行通讯,采用差分两…

力扣刷题--21.合并两个有序链表

I am the best !!! 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2…

【Linux】用户和用户组管理

管理用户 1.添加用户账号——useradd命令 【实例2-1-1】 按系统默认配置添加指定用户账号st和stu。 # 添加用户账号st [rootlocalhost ~]# useradd st # 添加用户账号stu [rootlocalhost ~]# useradd stu【实例2-1-2】添加用户账号stu01,UID为1004&am…

Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制

基于Altium Designer 23学习版,四层板智能小车PCB 更多AD学习笔记:Altium Designer学习笔记 1-5 工程创建_元件库创建 目录 6、光耦及二极管元件库模型创建 7、元件库模型的调用 二、原理图绘制及编译检查 8、元件的放置 9、器件的复制及对齐 10、…

视频流媒体播放器EasyPlayer.js H.265流媒体播放器当container窗口发生变化的时候,播放器如何自适应

流媒体播放器的核心技术及发展趋势展现了其在未来数字生活中的无限潜力。现今流媒体播放器将继续引领数字娱乐的新潮流,为用户提供更加丰富多样的内容体验。 流媒体播放器负责解码和呈现内容,常见的播放器包括VLC和HTML5播放器等。流媒体技术的应用场景广…

Windows系统使用全功能的跨平台开源音乐服务器Navidrome搭建在线音乐库

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动Navidrome容器4. 公网远程访问本地Navidrome4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定公网地址远程访问 前言 在数字时代,拥有一个个性化、便捷的音乐库成为了许多人的需求。本文…

在Excel中处理不规范的日期格式数据并判断格式是否正确

有一个Excel表,录入的日期格式很混乱,有些看着差不多,但实际多一个空格少一个字符很难发现,希望的理想格式是 1980-01-01,10位,即:“YYYY-mm-dd”,实际上数据表中这样的格式都有 19…

二进制 分析工具:Radare2、r2frida、Binutils、file、string、as、nm、ldd、objdump、readelf、strip

1、二进制 分析工具 工欲善其事,必先利其器,在二进制安全的学习中,​使用工具尤为重要。遇到一个不熟悉的文件时, 首先要确定 "这是什么类型的文件",回答这个问题的首要原则是,绝不要根据文件的扩…

大数运算(加减乘除和输入、输出模块)

为什么会有大数呢?因为long long通常为64位范围约为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,最多也就19位,那么超过19位的如何计算呢?这就引申出来大数了。 本博客适合思考过这道题,但是没做出来或…

Android开发实战班 - 现代 UI 开发之 Material Design及自定义主题

Material Design 是 Google 推出的一套设计语言,旨在为开发者提供统一的视觉和交互设计规范。Material Design 3(简称 MD3)是 Material Design 的最新版本,引入了更多现代化的设计元素和主题定制功能。本章节将介绍 Material Desi…

libaom中的变换块以及rdoq过程

一 av1支持的变换块大小枚举 enum { TX_4X4, // 4x4 transform TX_8X8, // 8x8 transform TX_16X16, // 16x16 transform TX_32X32, // 32x32 transform TX_64X64, // 64x64 transform TX_4X8, // 4x8 transform TX_8X4, // 8x4 transform TX_8X16, // 8x16 transform TX_16X8,…

Android 应用添加系统签名权限介绍

一、前言 Android 应用添加系统签名就能获取到系统权限调用一些系统接口, 添加系统签名的方式主要包括: 在Android Studio中配置签名文件生成apk 和 在源码目录编译添加系统签名生成apk。 本文介绍的都是一些基础的签名知识,后续延伸介绍相…

Spring 上下文对象

1. Spring 上下文对象概述 Spring 上下文对象(ApplicationContext)是 Spring 框架的核心接口之一,它扩展了 BeanFactory 接口,提供了更多企业级应用所需的功能。ApplicationContext 不仅可以管理 Bean 的生命周期和配置&#xff0…

Kafka-副本分配策略

一、上下文 《Kafka-创建topic源码》我们大致分析了topic创建的流程,为了保持它的完整性和清晰度。细节并没有展开分析。下面我们就来分析下副本的分配策略以及副本中的leader角色的确定逻辑。当有了副本分配策略,才会得到分区对应的broker,…

Move语言中的代币合约:设计和实现指南

系列文章目录 Task1:hello move🚪 Task2:move coin🚪 Task3:move nft🚪 更多精彩内容,敬请期待!✌️ 文章目录 系列文章目录前言什么是 Sui 链?什么是 Move 编程语言&a…

精酿啤酒厂建设攻略——关键步骤与注意点

建设一家精酿啤酒厂,每一步都至关重要。在这里,小编将为您精心梳理建设精酿啤酒厂的详细步骤和关键注意点,助您在啤酒市场的蓝海中乘风破浪。从投资预算的精确规划,到市场渠道的精心布局,从产品特色的精准定位&#xf…

什么是UGFC?模块电脑(核心板)规范标准简介四

1. 概念 UGFC是Unified Gold Finger Core Board的缩写(意指:统一接口定义金手指核心板),为武汉万象奥科电子有限公司基于企业标准定义的一种针对嵌入式、低功耗、通用型的小型计算机模块标准,采用204Pin金手指连接器…

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言,一个记录对应的指标值的绝对值,肯定落在所有指标值的绝对值的最小值和最大值构成的区间内,根据一定的算法&#x…

量子感知机

神经网络类似于人类大脑,是模拟生物神经网络进行信息处理的一种数学模型。它能解决分类、回归等问题,是机器学习的重要组成部分。量子神经网络是将量子理论与神经网络相结合而产生的一种新型计算模式。1995年美国路易斯安那州立大学KAK教授首次提出了量子…

mysql in查询大数据量业务无法避免情境下优化

在 MySQL 中,IN 查询操作广泛用于从数据库中检索符合条件的多条记录,但当涉及到大数据量的 IN 查询时,性能可能会显著下降。特别是当 IN 子句中的元素数量非常大时,MySQL 需要对每个元素进行匹配,这会导致查询变得非常…