我们如何才能找到从套接字接收到的所有字节?

2023-12-14

我想知道我们何时从没有 Socket.Disconnect() 的套接字接收所有字节 方法?

然而,我使用此代码来接收所有字节,但当 Scoket.Send(byte[]) 方法完成时,我使用 Socket.Disconnect() 方法。

List<byte> LBytes = new List<byte>();
do
{
System.Threading.Thread.Sleep(50);
BytesRead = obj_socket.Receive(obj_buffer, 0);
LBytes.Append(obj_buffer);
} while (BytesRead != 0);

因为当我们断开套接字时,套接字读取 0 字节。 例如我们发送了 100,000 字节,我们应该接收 100,000 字节。你怎么做到这一点?


虽然插座是open,没有办法做到这一点而不导致它在到达末尾时阻塞(期望更多数据)。

有几种方法可以做到这一点:

  • 发送后关闭套接字
  • 有一些表示“消息结束”的标记(使用编码文本就足够简单了 -0成为共同的选择;不过,发送任意二进制数据时很棘手)
  • 在数据之前发送长度前缀(在本例中为 100,000),并且停止阅读当你得到那么多的时候

如果它是一个NetworkStream,例如,使用长度前缀:

int expecting = //TODO: read header in your chosen form
int bytesRead;
while(expecting > 0 && (bytesRead = stream.Read(buffer, 0,
        Math.Min(expecting, buffer.Length))) > 0)
{
    // TODO: do something with the newly buffered data
    expecting -= bytesRead;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们如何才能找到从套接字接收到的所有字节? 的相关文章

  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • 选择列表逻辑应位于 ASP.NET MVC、视图、模型或控制器中的什么位置?

    我觉得我的问题与这个问题很接近 但我想对这样的代码应该放在哪里进行更一般的讨论 Asp Net MVC SelectList 重构问题 https stackoverflow com questions 2149855 asp net mv
  • 如何生成 appsettings..json 文件?

    我有一个 ASP NET Core 2 WebAPI 它将部署在以下环境中 INT QA STAGE 生产环境 基于上述 我需要有appsettings
  • 为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?

    我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 默认析构函数做了多少事情

    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
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque
  • C#中为线程指定特殊的cpu

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

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

随机推荐

  • SQL Server 全文搜索转义字符?

    我正在执行 MS SQL Server 全文搜索查询 我需要转义特殊字符 以便可以搜索包含特殊字符的特定术语 是否有内置函数可以转义全文搜索字符串 如果没有 你会怎么做 坏消息 没有办法 好消息 您不需要它 因为无论如何它都没有帮助 我在我
  • Android 无法实例化活动:在路径上找不到类

    我已经将项目导入到 Eclipse 中 当我尝试运行它时 会抛出以下异常 java lang RuntimeException Unable to instantiate activity ComponentInfo com polygra
  • WSO2 API 管理器 - 向公众公开发布者和商店 URL

    我在用着WSO2 API 管理器用于创建和管理开发者社区 据我所知 API 管理器是在 WSO2 Carbon Server 上驱动的 该服务器又在 Apache Tomcat 上运行 到目前为止 我可以毫无问题地运行 WSO2 API 管
  • 如何在我的应用程序中包含 64 位和 32 位本机代码

    我无法将我的应用程序上传到 Playstore 并出现此错误 我还构建了 Android App Bundle 来上传应用程序 但再次出现此错误 此版本不符合 Google Play 64 位要求 以下 APK 或 App Bundle 可
  • 爱普生TM-T88V格式化

    我设置了一台运行 Ubuntu Server 12 04 的小机器 并直接插入 Epson TM T88V 起初我能够很好地打印 使用 lp 但自动切纸器无法工作 我意识到它只是没有使用驱动程序中包含的正确 PPD 文件 因此一旦我将打印机
  • 内联时扩展方法出错

    我想扩展一些系统类型 然后通过内联使用它们 type System String with member this foo n this n type System Boolean with member this foo n sprint
  • 无法从 WebStorm 中排除的文件夹中删除 node_modules

    Recently WebStorm marked node modules as excluded and I can t remove it from excluded list Furthermore in Directories me
  • 将参数传递给视图

    在我的 RCP 应用程序中 我有一个带有TreeViewer左侧为导航 右侧为我的视图文件夹 透视图看起来像这样 public void createInitialLayout IPageLayout layout layout setEd
  • 想要在 jQuery 中无限次地重复 div 上的动画吗?

    我想要的是 我在尝试着创建动画 using fadeIn fadOut jQuery 中的函数 我完成了动画 但它只工作一次 尽管我希望它重复多次 我尝试过的 我尝试使用 setInterval 函数执行此操作两次 其中使用 TotalDu
  • Android 7.0:'javax.net.ssl.SSLHandshakeException:连接被对等方关闭

    当我尝试从我的应用程序访问 https 网络服务时 它给出了 javax net ssl SSLHandshakeException 连接被对等方关闭 错误 相同的 Web 服务在 Chrome 浏览器中运行良好 此问题仅在 Android
  • AS3 中准确的 BPM 事件监听器

    我正在尝试以特定的 BPM 将动画与音乐同步 我尝试过使用计时器 但在处理以毫秒为单位的小间隔时它并不准确 我做了一些阅读 发现了一种替代方法 它使用一个小的无声音频文件和 SOUND COMPLETE 事件作为计时器 我在这段代码中使用了
  • Flink KeyedCoProcessFunction 处理状态

    I use KeyedCoProcessFunction使用来自另一个流的数据丰富主数据流的函数 Code class AssetDataEnrichment extends KeyedCoProcessFunction String Pa
  • 为什么这个整数除法会得到 0?

    有人可以告诉我为什么下面的代码会输出0在标记线上 似乎一切都是正确的 但是当我尝试在接近尾声时得到结果时 它每次都给我 0 include
  • 如何使用 JSTL sql 标签

  • 将 C 数组作为可变大小的矩阵传递到 Fortran 中

    因此 我受委托将一些 Fortran 子例程翻译成 C 这些子例程被称为主要基于 C 的大型程序的控制流的一部分 我从调用堆栈顶部找到的函数开始 一次翻译一个函数 我面临的问题是将数组数据从 C 移交到 Fortran 假设我们在 c 中声
  • 以编程方式显示桌面

    我正在编写一个 Windows 窗体应用程序 我需要以编程方式返回桌面 我尝试了这段代码 但它不起作用 using System using System Windows Forms private void ToggleDesktop S
  • 安装配置文件插件后,在张量板上找不到配置文件按钮

    张量板版本 2 3 0 在 Tensorboard 上安装 profile plugin 之前 所以我遵循了这个顺序 pip install U tensorboard plugin profile gt Successfully inst
  • 扩展列表框中所选项目的高度

    有没有办法让所选项目的高度大于列表框中其余项目的高度 这就是我现在所拥有的 但它只是作为一个普通的列表框 public class BuddyListBox ListBox public BuddyListBox this ResizeRe
  • 使用 extjs 上传文件时未调用成功处理程序

    我有一个带有表单的 J2EE Web 应用程序 我可以将文件上传到服务器上的某个位置 在上传过程中 会向用户显示 waitMsg 一旦上传完成 该 waitMsg 就会消失 并有一个 msgBox 指示相同的信息 js文件中也提供了成功案例
  • 我们如何才能找到从套接字接收到的所有字节?

    我想知道我们何时从没有 Socket Disconnect 的套接字接收所有字节 方法 然而 我使用此代码来接收所有字节 但当 Scoket Send byte 方法完成时 我使用 Socket Disconnect 方法 List