我正在编写一个程序,通过 TCP 与一台设备的管理界面进行交互。问题是,设备的文档是用C写的,而我写的程序是用C#写的。我的问题是,文档指定
通信基于基于C结构的API缓冲区
再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP 发送原始结构。文档似乎暗示我应该使用 memcpy 将结构复制到 TCP 缓冲区,但 C# 不直接支持 memcpy。 C# 中是否有等效方法或不同的方法来实现此目的
您可以构建 C 结构的 .Net 版本,然后使用编组通过网络发送字节数组。这是一个例子MLocation
C 结构体。
[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(使用前将#替换为@)