NetworkStream.Write 与 Socket.Send

2024-02-14

我有一个 C# 应用程序,我使用自定义 FTP 库。现在我使用 Socket.Send 发送数据,但我想知道使用套接字启动 NetworkStream 并使用 NetworkStream.Write 是否会更好。

使用其中一种比另一种有什么优势吗?


的优点是NetworkStream主要源于以下事实:它是一个Stream。的缺点是Socket是从抽象 I/O 源读取和写入的通用代码,例如Stream无法处理Socket.

主要用例NetworkStream是你在其他地方有一些代码可以从Stream,并且您希望可以将它与Socket。你会知道如果处于这种情况然后NetworkStream将是一个很大的帮助!

举例来说,您有一个通信库,并且支持从文件、命名管道和 TCP/IP 序列化消息。 I/O 类的理想选择是Stream。然后你的序列化方法可以接受FileStream, a PipeStream, or a NetworkStream。它甚至会接受MemoryStream。这就是好处抽象因为我们之后created流,一个方法可以interact在不知道它是什么类型的情况下使用它。

从这个意义上说,一个NetworkStream使用adapter设计模式。它适应SocketAPI 到StreamAPI 以便期待的客户Stream可以使用它。

最后,问题是,如果NetworkStream is a Stream适配器用于Socket,我们应该使用哪一个?好吧,如果你need a Stream, then NetworkStream是您唯一的选择。如果你不需要Stream,然后您可以使用您最熟悉的 API。如果您已经在使用Socket成功,没有迫切的理由切换到NetworkStream.

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

NetworkStream.Write 与 Socket.Send 的相关文章

  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • 在 C# 中生成 HMAC-SHA1

    我正在尝试使用 C 来使用 REST API API 创建者提供了以下用于 hmac 创建的伪代码 var key1 sha1 body var key2 key1 SECRET KEY var key3 sha1 key2 var sig
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • .NET 客户端中 Google 表格中的条件格式请求

    我知道如何在 Google Sheets API 中对值和其他格式进行批量电子表格更新请求 但条件格式似乎有所不同 我已正确设置请求 AddConditionalFormatRuleRequest formatRequest new Add
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • 欧拉计划问题 233

    我决定解决欧拉计划接下来 但我遇到了一些重大问题 我做了一些分析并取得了一些相当不错的进展 但现在我陷入了困境 这是我的工作 Lemma 1 由于圆经过 4 个角点 因此对于任意 n 至少有 4 个解 但对于圆周上的每个点 都可以通过反射发
  • 有没有一种在 python 中创建复制构造函数的好方法?

    我意识到有人提出了与此非常相似的问题 尽管不完全是这样 我想为我的类的构造函数提供一个可选参数 如果它是我的类的实例 则将复制该参数 例如 类似 我知道这段代码不起作用 class Foo object def init self foo
  • 在对象数组中查找具有“id”属性最大值的对象

    在我的对象数组中 我想找到具有最高值的对象id财产 这是我的数组 myArray id 73 foo bar id 45 foo bar 一般来说 我使用 grep查找数组中的值 如下所示 var result grep myArray f
  • 在 Android 中触摸并拖动图像

    我正在研究一些示例 其中我想拖动与 Android 中的触摸相对应的图像 有人知道我该怎么做吗 public class TouchBall extends Activity Override protected void onCreate
  • 如何选择任意行的相邻行(在 sql 或 postgresql 中)?

    我想根据特定条件选择一些行 然后从该集合中取出一个条目及其前后的 5 行 现在 如果表上有主键 例如 主键在数值上比目标行的键小 5 且比目标行的键多 5 我可以在数字上执行此操作 因此选择主键为 7 的行及其附近的行 select pri
  • 如何在 Android 中编辑弹出菜单项的尺寸?

    我有一个弹出菜单 当我单击按钮时会下拉 然而 我觉得这个菜单中的项目相对于我的应用程序的整体视图来说看起来不太好 我想知道是否可以编辑菜单中项目的尺寸 如果可能的话 也许可以缩短每件物品的高度 PopupMenu popup new Pop
  • NPM 包中 src 和 dist 文件夹的作用

    我在用着矩形 https github com mgonto restangular用于 HTTP 请求 我想使用 customPATCH 方法 我可以在 Restangular src 目录中看到它here https github co
  • Android setTextSize TextView移动基线并截断文本高度

    我正在尝试使用背景图像调整 TextView 的大小 我有一个扩展 TextView 类的类 并按如下方式添加 MyCustomTextView tv2 new MyCustomTextView this RelativeLayout La
  • 在 DataGridView 中编辑文本框单元格,就像它是普通文本框一样(按下箭头时不会跳转)

    我在 DataGridView 中有 多行 自动换行 文本框列 如果能够像普通文本框一样编辑它们 那就太好了 当我按下向下箭头时 我希望插入符在文本框中向下一行 我不希望它像通常那样跳到下一行 同样地 我希望按 Enter 键在文本框单元格
  • 如何在数据表JavaScript中制作垂直标题列表?

    如何在数据表中设置垂直标题列 It should be as follows and working as datatble 您正在寻找数学中称为矩阵转置的东西 要获得矩阵 表的转置 请将行转换为列
  • Android、Google Drive:Google 同意屏幕冻结

    我已将我的应用程序升级到 Google Drive REST API 及其 Java 包装器 如下所述 https developers google com drive android deprecation https develope
  • 在没有布局管理器的情况下将 JScrollPane 添加到 JPanel

    在开始之前 我知道不使用布局管理器是一个坏主意 通常我确实使用布局管理器 但是 我还让所有组件根据窗口的大小自动重新调整大小和重新定位 此外 我正在开发的程序在其整个生命周期中仅打算在一台机器上运行 请不要仅仅因为缺少布局管理器而对我投反对
  • 将项目数组拆分为 N 个数组

    我想将数字数组分成N组 必须从larger to smaller groups 例如 在下面的代码中 分割一个数组12数入5数组 结果应该从大 组 到小均匀分割 source 1 2 3 4 5 6 7 8 9 10 11 12 outpu
  • C/C++ 大数计算

    我正在尝试在 C 程序中计算以下数字 result 3 pow 2 500000000 2 1000000000 2 的幂太大 无法正确处理 gt 我的印象是 我可以使用模数将计算分成多个步骤 以减少结果大小 有人有这样做的策略吗 还有其他
  • 将 WP 8.0 应用程序定位到 WP8.1 应用程序?

    我安装了 Visual Studio 2013 含更新 2 我正在 VS2012 中为 Windows Phone 8 0 开发我的项目 现在我决定Upgrade它到 Windows Phone 8 1 应用程序 所以我按照说明进行操作Ta
  • 选择选项卡时更改 div 高度

    我有一个选项卡式内容 有 4 个选项卡 每个选项卡中都有两个 div 构成边框设计 我遇到的问题是 当选择它们所在的选项卡时 我不知道如何对 div 进行动画处理以更改高度 我有一个小提琴供参考 http jsfiddle net jw6t
  • 如何将 CGRect 的大小增加一定的百分比值?

    如何将 CGRect 的大小增加一定的百分比值 我应该使用某种形式的CGRectInset去做吧 Example 假设我有一个 CGRect 10 10 110 110 我想将其大小增加 20 保留相同的中心点 0 0 120 120 您可
  • Android Preview M:授予权限后重新创建活动

    我使用 Preview M 并在其上测试我的应用程序 尤其是 将文件保存到外部存储 部分 在下载 保存过程开始之前 我请求 Manifest permission WRITE EXTERNAL STORAGE 开发者页面上描述的权限 htt
  • 从 Maven 部署到 Nexus 出现错误:ReasonPhrase:Forbidden

    http numberformat wordpress com 2011 05 18 nexus repository http numberformat wordpress com 2011 05 18 nexus repository
  • NetworkStream.Write 与 Socket.Send

    我有一个 C 应用程序 我使用自定义 FTP 库 现在我使用 Socket Send 发送数据 但我想知道使用套接字启动 NetworkStream 并使用 NetworkStream Write 是否会更好 使用其中一种比另一种有什么优势