正确使用 IdUDPClient.ReceiveBuffer

2023-12-20

感谢您的帮助。

我正在将旧版本的 Delphi 转换为 XE5,但我遇到了 Indy 组件的问题。需要使用IdUDPClient.ReceiveBuffer

这是我的代码:

while not Terminated do
begin
  try
    lenUDP:= IdUDPClient.ReceiveBuffer(myBuf, buffLength, -1 );
    if lenUDP<> 0 then
      Synchronize(ReceivedLine);
  except
    Terminate;
  end;
end;

在哪里, myBuf = char 的压缩数组 [0 .. buffLength -1];

非常感谢所有帮助。

谢谢你,

Mike


正如我在对你的评论中告诉你的上一个问题 https://stackoverflow.com/q/27129331:

你必须使用一个TIdBytes也为此。使用SetLength()将其预先分配到所需的大小,然后调用ReceiveBuffer()有了它,然后您可以根据需要直接或使用它复制数据BytesToRaw().

例如:

private
  myBuf: TIdBytes;
...

while not Terminated do
begin
  try
    SetLength(myBuf, buffLength);
    lenUDP := IdUDPClient.ReceiveBuffer(myBuf, -1);
    if lenUDP > 0 then
    begin
      SetLength(myBuf, lenUDP);
      Synchronize(ReceivedLine);
    end;
  except
    Terminate;
  end;
end;

由于您的原始缓冲区是一个数组Char,你的处理函数被命名为ReceivedLine(),我假设您的数据本质上是文本数据。如果这是真的,您可以使用BytesToString() or (T|I)IdTextEncoding.GetString()转换一个TIdBytes to a String,如果是这样的话ReceivedLine() uses myBuf例如:

S := BytesToString(myBuf{, en8bit});
S := BytesToString(myBuf, 0, lenUDP{, en8bit});
S := IndyTextEncoding_8bit.GetString(myBuf);
S := IndyTextEncoding_8bit.GetString(myBuf, 0, lenUDP);

您可以通过各种方式使用 Indy 支持的任何字符集编码en...(), Indy...Encoding(), or IndyTextEncoding...()中的函数IdGlobal单位,或CharsetToEncoding()函数在IdGlobalProtocols unit.

UPDATE:由于您的缓冲区是其中包含联合的记录的一部分,因此您必须使用本地TIdBytes变量代替:

type
  myRecord = record
    ...
    myBuf: array[0..buffLength-1] of Byte;
    ...
  end;

...

private
  myRec: myRecord;

...

var
  udpBuf: TIdBytes;
...
SetLength(udpBuf, buffLength);
while not Terminated do
begin
  try
    lenUDP := IdUDPClient.ReceiveBuffer(udpBuf, -1);
    if lenUDP > 0 then
    begin
      BytesToRaw(udpBuf, myRec.myBuf[0], lenUDP);
      Synchronize(ReceivedLine);
    end;
  except
    Terminate;
  end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正确使用 IdUDPClient.ReceiveBuffer 的相关文章

  • Delphi COM 对象中的早期绑定和后期绑定在性能方面哪个更好

    在delphi中 如果要创建COM对象 可以通过两种方式来完成 第一个是早期绑定 例如 uses MSScriptControl TLB MS Script Control var obj IScriptControl begin obj
  • 为什么通过UdpClient发送会导致后续接收失败?

    我正在尝试创建一个 UDP 服务器 它可以向所有向其发送消息的客户端发送消息 真实情况要复杂一些 但最简单的方法是将其想象为一个聊天服务器 之前发送过消息的每个人都会收到其他客户端发送的所有消息 所有这一切都是通过UdpClient 在单独
  • 如何远程获取系统的网络共享和连接?

    我正在寻找一种远程获取类似于以下控制台应用程序的信息的方法 net use 净份额 网络统计 ano 但是 我需要能够在系统上运行第三方应用程序的情况下执行此操作 这有效地排除了使用 psexec 远程执行命令 因为 psexec 将作为服
  • Delphi预定义环境变量

    谁能告诉我在哪里可以找到 RAD Studio 中可用的 伪 环境变量列表 例如 Platform Config 等 具体来说 我想要一个能够为我提供 RTL 版本的版本 以便我可以将编译单元 dcu 放入正确的目录中 即 XE为D15 X
  • 可以解析Delphi XMLDoc格式并构建在线帮助的工具

    API 文档的 XMLDoc 工具解释如下 http edn embarcadero com article 32770 http edn embarcadero com article 32770 是否有任何免费或商业工具可用于创建基于
  • 如何将参数传递给 OLE 自动化对象(例如 MS Word)

    这主要是一个Delphi语法相关的问题 调用 OLE 对象的方法时 我需要将参数设置为 True 我需要在Word Automation中设置 这是来自词参考 http support microsoft com kb 285885 en
  • 如何发送/接收 JSON?

    我知道这是一个愚蠢的问题 但我通常不进行 Web 编程 并且被要求发送一些 JSON 数据并接收一些回报 我用谷歌搜索 很清楚如何编码和解码 JSON 数据 但我对此很陌生 我不知道如何与给定的 URL 进行通信并说 这里有一些数据 请发回
  • 构建多线程 TCP/IP 服务器

    我想构建一个可供最多 100 个并发客户端使用的 TCP IP 服务器 但仍不确定如何开始 至少我需要服务器 监听客户端 并将它们全部存储在数组或列表中 对于每个客户端 它需要根据其客户端状态接收和发送数据 当有人连接或断开连接时 服务器应
  • 检测 TWebBrowser 文档中的活动元素何时发生变化

    是否有任何我可以挂钩的事件来检测网页上的活动元素何时发生变化 例如 当用户聚焦编辑框时 我知道我可以检查计时器中的活动元素 但如果可能的话我宁愿避免这种情况 这并不是对您的问题的完整答案 但希望能帮助您完成大部分工作 对于通过类似的 q 到
  • 在设计时存储“记录数组”的最佳方式

    我需要在设计时存储一组数据 以便在运行时构造一组组件的内容 像这样的事情 type TVulnerabilityData record Vulnerability TVulnerability Name string Description
  • Firemonkey 移动应用程序和远程 MySQL

    我正在使用 Delphi XE5 并且我已经创建了基本的 Firemonkey 移动应用程序 Delphi 我想连接到远程 MySQL 数据库 我应该使用哪一个数据库管道 FireDAC DBExpress 等 您可以使用标准 TSQLQu
  • Delphi 窗体在显示时总是会触发 OnResize 吗?

    如果我创建一个新的 Delphi 表单 挂钩其 OnResize 事件并运行该应用程序 则在显示窗口之前会触发 OnResize 我不知道对于任何窗口来说 这种情况是否总是会发生 对于熟悉 Windows API 的人来说 我已将其追溯到
  • 可以在delphi数据集中创建一个假数据字段吗?

    我想在 DataSet 不是 ClientDataSet 中创建一个 假 数据字段 该字段不应存储在数据库中 它不是计算字段 应允许用户输入输入数据 该字段具有业务逻辑含义 因此用户更新其值后应该更新其他字段 使用 OnFieldChang
  • TRESTRequest:是否可以在 POST 请求中使用自定义媒体类型?

    例如 我们有一个 API 需要我们自己的供应商特定内容类型application vnd xxxx custom custom data json但查看 REST Client 的源代码 它似乎总是默认为 REST Types 中的 Con
  • Delphi 2010:如何将 UTF8 编码的 PAnsiChar 转换为 UnicodeString?

    情况 我有一个外部 DLL 它使用 UTF 8 作为其内部字符串格式 接口函数都使用 PAnsiChar 来传递字符串 我的应用程序的其余部分使用 Delphi 的本机string类型 由于我正在使用 Delphi 2010 这将映射到Un
  • 在主表单之前显示登录表单

    我在表单之间导航时遇到问题 我使用 Delphi XE5 创建了一个 Android Firemonkey 移动应用程序 我目前有一个登录表单和主表单 现在我想要有关如何处理登录表单以显示在主表单之前的建议 在 项目选项 中的表单下 选择要
  • 如何在 TList 中存储动态数组?

    我需要存储未知数量的组 每个组都有未知数量的元素 项目 这是我的 小组 TGroup array of Integer lt dynamic array as you can see 我想使用 TList 来保存我的组 我的想法是 我可能想
  • 从单个应用程序中的多个线程调用 dll 函数是否安全?

    我正在 Delphi 2009 中编写一个服务器应用程序 它实现了多种类型的身份验证 每种身份验证方法都存储在单独的 dll 中 第一次使用身份验证方法时 会加载适当的 dll 仅当应用程序关闭时 DLL 才会被释放 在服务器线程 连接 之
  • 能否从 Vista Shell 获取 48x48 或 64x64 图标?

    如果 Vista Shell 中存在 48x48 或 64x64 图标 如何使用 SHGetFileInfo 获取在 TImage 中显示图标的句柄 我想从图像列表中选择一个代表文件夹路径的图标 并在 Timage 中显示 48x48 或
  • 使用 StretchDIBits 使用 Delphi 6 处理条形码图像 - 输出中缺少条形线

    我的应用程序是在 Delphi 6 中开发的 由于后台处理和大量数据 它消耗大约 60MB 120MB 物理内存 这是一个资源密集型应用程序 该应用程序的功能之一是在进行某些处理后创建条形码图像 如果用户继续生成条形码 那么至少十分之一的条

随机推荐

  • C# 中对 volatile 变量的赋值

    我对 C 的理解 感谢 Jeff Richter 和 Jon Skeet 认为赋值是 原子的 不同的是 当我们混合读取和写入 递增 递减 时 因此我们需要在互锁上使用方法 如果只有读取和分配 这两个操作都是原子操作吗 public clas
  • 理解 HashMap

    好吧 这是我不明白的地方 如果您尝试使用以下方法检索对象get 方法并返回null 仍然有可能null可以存储为与您提供给的密钥关联的对象get 方法 您可以通过将对象的密钥传递给containsKey 地图的方法 这返回true如果密钥存
  • 如何使用 Gradle 将 Java 代码和 Junit 测试放在一起构建

    我有一个项目 其中主要源代码和该源代码的测试用例保存在同一个包 目录中 每个测试类都是其正在测试的类的名称 末尾附加 Test 因此 如果我有一个 Foo java 那么它旁边就会有一个 FooTest java 我的问题是 如何使用 Gr
  • webshim polyfill 画布在 IE7 模式下无法工作

    我在让 webshims 插件 canvas polyfill 工作时遇到问题 使用 IE7 模式在 IE9 中出现以下错误 SCRIPT438 Object doesn t support property or method fillR
  • 使用 awk / sed 查找并替换文件中的键值对到其他文件

    我有一个键值文件 名为key txt 有一个 分隔器 这是值的显示方式 server name server1 username someuser keyname 123key 我的第二个文件是一个脚本文件 文件中到处都有这些键 它以以下格
  • 用于非零基数组指针分配的 C++ gcc 扩展?

    我正在寻找 gcc 支持的 C 语言扩展来启用非从零开始的数组指针的分配 理想情况下我可以简单地写 include
  • 优化 Cython 中的字符串

    我试图向我们的小组展示 Cython 在增强 Python 性能方面的优点 我已经展示了几个基准 所有这些都通过以下方式实现加速 编译现有的 Python 代码 使用 cdef 静态类型变量 特别是在内循环中 然而 我们的大部分代码都进行字
  • pyvenv 安装错误的 pip 版本

    我正在创建一个 virtualenvpyvenv env但安装的 pip 版本已过时 我可以在虚拟环境中手动更新 pip 但我希望自动获得正确的版本 没有激活 venv gt pip V pip 7 1 2 from usr lib pyt
  • 查找所有应用程序文件夹并在 Inno Setup 中安装文件

    这是一个类似的问题找到应用程序的路径 并将文件复制到 Inno Setup 中的该目录 https stackoverflow com questions 46282559 我想将文件安装到 Inno Setup 中用户的 MATLAB 文
  • 如何解读uops.info?

    我查了一下说明在 uops info 上尝试找出 1 延迟是多少 以及 2 我可以执行多少个并发负载 我在解释结果时遇到困难 下面的屏幕截图 上面也有链接 What do the different variants of the inst
  • 一旦使用pthread满足条件,for循环就不会终止

    当我发现 for 循环没有终止时 我正在编写一段多线程代码 起始代码大致是这样的 for int i V 1 tid i gt 0 i NTHREADS stuff V 和 NTHREADS 是常量 tid 是使用传递的线程 IDpthre
  • Jupyter:在不同的单元格中重新绘制

    我想做这样的事情 import matplotlib pyplot as plt matplotlib inline fig1 plt figure 1 plt plot 1 2 3 5 2 4 plt show 在一个单元格中 然后在另一
  • Swift 3 和 iOS 10 错误内存泄漏错误

    当与 iOS 10 和 Swift 3 一起使用时 Xcode 8 中似乎存在 错误的 内存泄漏错误 以下代码报告 Instruments 和 Xcode 8 内存调试器中的内存泄漏 class SomeClass NSObject var
  • Python将文本文件转换为字典

    我正在编写一个拼写检查函数 并且我有一个如下所示的文本文件 teh the cta cat dgo dog dya day frmo from memeber member 错误的拼写位于左侧 这将是我的密钥 正确的拼写位于右侧 我的值 d
  • 如何在 RxJava 中的动态列表上创建观察者?

    我需要在不断变化的数组上创建一个观察者 添加元素 我正在使用 Observable from Iterable 但它似乎在 ArrayList 上创建了 Observable 就像创建时一样 我需要通知观察者并在每次 ArrayList 添
  • 使用 ConcMarkSweepGC 的连续 CMS 收集

    在 Linux 上使用以下 JVM 选项启动 Tomcat 2cpu 4g RAM 800M ehcache 元素 Xmn512m Xmx2g Xms2g XX UseConcMarkSweepGC Xss128k XX PermSize
  • 我可以指定 MSBuild 标记的输出路径吗?

    是否可以为以下文件的输出指定不同的文件夹
  • 加入线程时处理异常的最佳方法

    出于某种原因 我对以下内容感到困惑 假设我有Thread A that 绝对地需要执行后Thread B已完成其处理 做到这一点的一种方法是Thread A加盟Thread B 简单的例子 public class MainThread p
  • android:使用默认视频播放器

    我有一个播放视频文件的应用程序 我一直在使用代码Videoview并开始Videoview手动播放视频文件 但是 我只是想知道我是否可以使用 android 的默认媒体播放器或视频播放器 而不是创建或使用VideoView播放文件 如果问题
  • 正确使用 IdUDPClient.ReceiveBuffer

    感谢您的帮助 我正在将旧版本的 Delphi 转换为 XE5 但我遇到了 Indy 组件的问题 需要使用IdUDPClient ReceiveBuffer 这是我的代码 while not Terminated do begin try l