在 C# 中通过 TCP 发送 C 结构体

2024-04-22

我正在编写一个程序,通过 TCP 与一台设备的管理界面进行交互。问题是,设备的文档是用C写的,而我写的程序是用C#写的。我的问题是,文档指定

通信基于基于C结构的API缓冲区

再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP 发送原始结构。文档似乎暗示我应该使用 memcpy 将结构复制到 TCP 缓冲区,但 C# 不直接支持 memcpy。 C# 中是否有等效方法或不同的方法来实现此目的


您可以构建 C 结构的 .Net 版本,然后使用编组通过网络发送字节数组。这是一个例子MLocationC 结构体。

[StructLayout(LayoutKind.Sequential, Pack = 8)]
public struct MLocation
{
    public int x;
    public int y;
};

public static void Main()
{
    MLocation test = new MLocation();

    // Gets size of struct in bytes
    int structureSize = Marshal.SizeOf(test);

    // Builds byte array
    byte[] byteArray = new byte[structureSize];

    IntPtr memPtr = IntPtr.Zero;

    try
    {
        // Allocate some unmanaged memory
        memPtr = Marshal.AllocHGlobal(structureSize);

        // Copy struct to unmanaged memory
        Marshal.StructureToPtr(test, memPtr, true);

        // Copies to byte array
        Marshal.Copy(memPtr, byteArray, 0, structureSize);
    }
    finally
    {
        if (memPtr != IntPtr.Zero)
        {
            Marshal.FreeHGlobal(memPtr);
        }
    }

    // Now you can send your byte array through TCP
    using (TcpClient client = new TcpClient("host", 8080))
    {
        using (NetworkStream stream = client.GetStream())
        {
            stream.Write(byteArray, 0, byteArray.Length);
        }
    }

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

在 C# 中通过 TCP 发送 C 结构体 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • 无法通过 SSH 连接到 openshift

    我在通过 SSH 访问 Openshift 时遇到问题 我仍然可以通过 Git 将代码推送到 Openshift 但是 当尝试通过 SSH 连接到 Openshift 时 服务器被拒绝 并显示错误 没有可用的受支持的身份验证方法 服务器发送
  • 如何捕获片段中工具栏上的导航图标单击?

    我有一个对话框片段 其中布局中有工具栏 我想让后退按钮 导航图标 在工具栏中工作并在单击时退出片段 但我无法捕获 对话框 片段中工具栏导航图标上的单击事件 这是我获取工具栏的方式 toolbar Toolbar rootView findV
  • Unity 后处理 PostProcessEffectRenderer 在编辑器中显示,但在构建中不显示

    将 PostProcessEffectRenderer 的实现添加到 Unity 后处理堆栈后 效果在 Unity 编辑器中完美运行 但不会在构建的游戏中显示 对构建质量的更改没有效果 使用针对 Windows x86 64 构建的最高质量
  • Adobe Reader 无法打开在 Zend Framework 中使用 mPDF 创建的 .pdf 文件

    我正在尝试在 Zend Framework 应用程序中使用 mPDF 从操作的输出生成 pdf 文件 这是我的操作代码 public function testAction this gt helper gt viewRenderer gt
  • CSS3 具有两个方向的线性渐变

    我的网站中有一个标题 当前使用线性渐变从一种颜色移动到另一种颜色 这是CSS top header position absolute bottom 0 left 0 width 100 z index 99999 FF3 6 backgr
  • 我可以从类似于 jaxb 的 json 数据创建类吗

    因此 我的代码是 api 的客户端 数据以 xml 形式返回 我已经能够从该 xml 的一些示例创建有效的 xsd 文件 然后从模式生成一些 JAXB 类 以便我的代码现在可以加载并使用xml 数据 而无需直接使用 Xml 但不幸的是 在最
  • SignalR .NET Core 驼峰命名法 JSON 合约解析器

    使用 NET Core RC2 让 SignalR 工作 但试图让它返回 JSON 中的驼峰命名法属性 对于我正在使用的 API services AddMvc AddJsonOptions o gt o SerializerSetting
  • 如何获取 gmail api 的消费者密钥和消费者秘密?

    我正在尝试使用 Gmail php xoath php 示例 但是它需要输入消费者密钥和消费者秘密 我在 Gmail api 文档中找不到如何获取这些密钥和秘密 有谁知道如何获取它们或知道任何相关文档吗 Use anonymous anon
  • Bootstrap Carousel:删除自动滑动

    我正在使用 Bootstrap 轮播 我想要的是滑块仅在单击导航或分页时才会滑动 我尝试过删除 carousel carousel interval 6000 它工作正常 但我的问题是一旦我点击了导航或分页 它现在就会自动滑动 是否可以取消
  • 对“__divdi3”的未定义引用

    在链接一些对整数类型执行除法和模运算的代码时long long我收到以下两个错误 util c text 0x1af undefined reference to divdi3 util c text 0x1ef undefined ref
  • javascript在两个不同的索引处分割字符串

    我有一张 amex I E 信用卡 371449635398431我想分成三部分3714 496353 98431 是否有一种简单的方法可以通过预定义索引 在本例中为 4 和 10 分割字符串 可能使用简单的正则表达式函数 我真的不认为这里
  • 按天分组的 SQL 查询

    我想列出所有销售额 并按天对总和进行分组 Sales saleID INT amount INT created DATETIME 注意 我使用的是 SQL Server 2005 如果您使用的是 SQL Server dateadd DA
  • 预发送脚本如何检索参数化 Jenkins 作业的参数?

    我想根据参数化作业的布尔参数值取消电子邮件发送 该参数名为 skip email 我尝试编写包含以下内容的预发送脚本 但它不起作用 def env System getenv logger println Should I skip ema
  • 将 mvc-mini-profiler 与 EF 4.0 和 Ninject 结合使用

    我正在尝试将新的 mvc mini profiler 与基于 EF4 的应用程序一起使用 但我不知道如何正确连接到目标数据源 据我所知 Func
  • 如何在 Visual C++ 2008 中链接静态库?

    我的 VC 解决方案包括两个项目 一个应用程序 exe 和一个静态库 两者都编译良好 但无法链接 我使用的静态库中的每个函数都收到 无法解析的外部符号 错误 它们看起来像这样 MyApplication obj 错误 LNK2019 无法解
  • FileStream 添加“额外”字符到 TXT 文件

    无论我读取 TXT 文件还是 XML 文件 我总是会看到 额外 信息添加到保存到磁盘的文件中 我们首先执行以下操作 FileStream fs new FileStream fileMoverFile SourcePath FileMode
  • 为什么 C# 编译器对 double IEnumerable 和 foreach T 感到满意?

    我知道这段代码不起作用 并且以有效的方式编写它没有问题 我想知道编译器如何构建而不出现任何错误 如果您在哪里运行它 您会遇到运行时错误吗 假设数据不为空 using System using System Collections Gener
  • 是否有可能将一个 HMap '转换' 为另一个 HMap

    如果我有一个无形的 https github com milessabin shapeless HMap MappingA 为类型正确定义隐式MappingA K V 我可以安全地将其转换 映射到HMap MappingB class Ma
  • MediaRecorder.AudioSource.VOICE_CALL 不适用于 Android 4.1.2 中的通话录音

    https github com esnyder callrecorder https github com esnyder callrecorder我已应用此源代码来执行通话录音 但它不是录音通话 双向录音 经过大量搜索后 我发现 And
  • 在 C# 中通过 TCP 发送 C 结构体

    我正在编写一个程序 通过 TCP 与一台设备的管理界面进行交互 问题是 设备的文档是用C写的 而我写的程序是用C 写的 我的问题是 文档指定 通信基于基于C结构的API缓冲区 再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP