读取 NetworkStream 不会推进流

2024-01-10

我有一个客户端-服务器应用程序,其中服务器传输一个 4 字节整数,指定下一次传输的大小。当我在客户端读取 4 字节整数(指定 FILE_SIZE)时,下次读取流时,我会读取 FILE_SIZE + 4 个字节。

从此流读取时是否需要将偏移量指定为 4,或者是否有办法自动推进 NetworkStream,以便我的偏移量始终为 0?

SERVER

NetworkStream theStream = theClient.getStream();

//...
//Calculate file size with FileInfo and put into byte[] size
//...

theStream.Write(size, 0, size.Length);
theStream.Flush();

CLIENT

NetworkStream theStream = theClient.getStream();

//read size
byte[] size = new byte[4];
int bytesRead = theStream.Read(size, 0, 4);

...

//read content
byte[] content = new byte[4096];
bytesRead = theStream.Read(content, 0, 4096);

Console.WriteLine(bytesRead); // <-- Prints filesize + 4 

正确的;找到了;FileInfo.Length is a long;您致电:

binWrite.Write(fileInfo.Length);

写入8个字节,小尾数法。然后你可以通过以下方式读回:

filesize = binRead.ReadInt32();

which 小尾数法会给你相同的值(至少对于 32 位)。你有 4 个00不过,流中未使用的字节(从long) - 因此 4 字节不匹配。

使用以下之一:

  • binWrite.Write((int)fileInfo.Length);
  • filesize = binRead.ReadInt64();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取 NetworkStream 不会推进流 的相关文章

  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • mprotect 之后 malloc 导致分段错误

    在使用 mprotect 保护内存区域后第一次调用 malloc 时 我遇到分段错误 这是执行内存分配和保护的代码片段 define PAGESIZE 4096 void paalloc int size Allocates and ali
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 从成员函数指针类型生成函子

    我正在尝试简化 通过make fn 预处理参数的函子的生成 通过wrap 对于 arity 的成员函数n 生成函子基本上可以工作 但到目前为止只能通过显式指定成员函数的参数类型来实现 现在我想从它处理的成员函数类型生成正确的函子 struc
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • 为什么具有相同名称但不同签名的多个继承函数不会被视为重载函数?

    以下代码片段在编译期间产生 对 foo 的调用不明确 错误 我想知道是否有任何方法可以解决此问题而不完全限定对 foo 的调用 include
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • 二叉树中的 BFS

    我正在尝试编写二叉树中广度优先搜索的代码 我已将所有数据存储在队列中 但我不知道如何访问所有节点并消耗它们的所有子节点 这是我的 C 代码 void breadthFirstSearch btree bt queue q if bt NUL
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque

随机推荐

  • 在没有 .plist 文件的情况下使用适用于 iOS 的 Google Analytics

    根据 Google 的文档 iOS 分析 他们希望您下载一些自动生成的 plist 文件来配置您的应用程序 不幸的是 我有多个报告套件 调试 发布 需要根据构建动态切换 所以我正在尝试做两件事之一 有没有办法完全放弃 plist 文件并动态
  • 构造函数继承和自定义构造函数

    使用这个层次结构 struct TestBase Constructor TestBase TestBase int a TestBase TestBase const testBase Destructor virtual TestBas
  • 无法解析主要引用,因为它是针对比当前目标框架更高版本的 .NET 框架构建的

    我正在尝试构建一个引用第 3 方 SlingshotClient dll 的项目 该项目在其他开发人员工作站上构建良好 但是 我收到以下错误 我可以想象导致我的问题的一个差异是我的计算机上还安装了 VS 2012 和 NET Framewo
  • 对 .NET Framework 程序集的间接依赖

    所以我更新了我的 Telerik dll 将新的 dll 放在顶部 然后清理我的解决方案并重建 以产生以下错误 警告 3 无法解析主要引用 Telerik Windows Documents FormatProviders Xaml 因为它
  • setup.py 安装本地包

    如果我有一棵树 看起来像 project package init py setup py env setup py 有没有办法将嵌套的 setup py 包含在顶部 setup py 的安装中 我想避免这种情况 pip install e
  • 使用 Google Books API 的推荐结果不相关

    我正在尝试使用 Google Books API 构建书名推荐系统 不幸的是 我得到的结果与https books google com https books google com 例如 这是我通过单词 sher 搜索得到的列表 主要期待
  • 不断收到“无法找到支持 apt 的 Java 运行时。请访问 http://www.java.com 以获取有关安装 Java 的信息。” [复制]

    这个问题在这里已经有答案了 我正在尝试执行命令sudo apt install git nodejs npm curl但我不断收到一条错误消息 提示我没有安装 java 即使我安装了 我什至在他们的网站上安装了最新的jdk 但仍然遇到这个问
  • Heroku 始终运行 asset:precompile 与 Rails 3.2 的生产环境

    我将 Heroku 环境设置为暂存 但我的资产始终在生产环境中编译 Here s heroku config GEM PATH gt vendor bundle ruby 1 9 1 LANG gt en US UTF 8 PATH gt
  • 在 OpenCL 中,mem_fence() 与 Barrier() 相比有何作用?

    Unlike barrier 我想我明白 mem fence 不影响工作组中的所有项目 OpenCL 规范指出 第 6 11 10 节 对于mem fence 命令加载和存储执行内核的工作项 所以它适用于single工作项 但同时 在第 3
  • 如何从实例创建 Amazon EC2 AMI? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何从实例创建 EC2 AMI 好的 我得到了一个 EC2 帐户 我使用 Fedora 8 Apache MySQL PHP 启动了一个实例 我还配置
  • Java:定义术语初始化、声明和赋值

    我发现 defs 是循环的 主语是由动词定义的 但动词是未定义的 那么你如何定义它们呢 循环定义 初始化 初始化一个变量 可以在以下时间完成 宣言 任务 给变量赋值 它可以在任何地方完成 只需使用最终标识符一次 宣言 为变量声明值 更新 尝
  • 如何从类型安全配置中配置系统属性或 logback 配置变量?

    我的变量中有默认值logback xml配置文件 我希望能够从我的类型安全配置中选择设置这些变量application conf file 我正在使用 one jar 部署应用程序 并且application conf打包在可部署 jar
  • 恢复原来的合并后合并

    好吧 当我将一些代码合并到存储库时 我不专心 某些代码的流程发生了重大变化 所以我不得不恢复合并提交 我回家了一天 现在 master 上有更多提交 我似乎无法触发合并 以便我可以将我的代码放入 master 中 因为我有两个文件之间的差异
  • 在 O(1) 中实现堆栈(push、pop 和 findmin)

    我已经看过这个问题的两个堆栈实现 但我真的很困惑如何获得 O 1 操作 考虑以下示例 S1 3542761986759 S2 3332221111111 这里的想法 算法是 将元素 E 推到 S1 上 检查 S2 的顶部是否 gt E 如果
  • 连接顺序如何影响查询性能

    我在查询中遇到了时间性能的巨大差异 并且查询中连接 内部和左外部 发生的顺序似乎造成了所有差异 是否有一些 基本规则 应按什么顺序加入 它们都是更大查询的一部分 它们之间的区别在于左连接在更快的查询中放在最后 慢查询 gt 10分钟 SEL
  • 在 EditorFor 和 DisplayFor 之间切换

    我有一个部分视图 它设置为显示数据库记录的表 网格 我可以轻松地让它显示该行的显示或编辑器模板 但是如何从displayFor to editorFor当我单击并编辑或保存链接时 div div class divQuestionItems
  • 将 JSON 字符串转换为 Lua 表?

    我需要将 Json 字符串转换为 Lua 中的表数据结构 我正在使用以下代码 local json require json local t name1 value1 name2 1 false true 23 54 a 021 strin
  • 防止传单 R-Map 缩小?

    我用传单 R 包制作了传单地图 This is what the result looks like 我对此非常满意 但是当我将其嵌入网站并用笔记本电脑向下滚动文章时 我经常会不小心缩小地图 然后看起来像这样 用户也必须放大才能看到地图上有
  • 覆盖 SharePoint 2010 中的 X-UA 兼容元

    我正在使用 SharePoint 2010 我想使用对于特定页面 母版页将其设置为 IE 8 这不允许我在 CSS 中使用 box shadow 例如 我无权访问母版页来更改它 我还读到 不建议更改母版页中的元 因为它可能会导致日历等其他内
  • 读取 NetworkStream 不会推进流

    我有一个客户端 服务器应用程序 其中服务器传输一个 4 字节整数 指定下一次传输的大小 当我在客户端读取 4 字节整数 指定 FILE SIZE 时 下次读取流时 我会读取 FILE SIZE 4 个字节 从此流读取时是否需要将偏移量指定为