在 UDP 数据报中接收 0x1A

Receiving 0x1A in UDP datagram

我正在使用 C#.NET 来与 matlab 交互以进行 UDP 通信(因为我没有用于 matlab udp 支持的工具包)。我制作了两个 C# 类(客户端 Class 和服务器 Class)并将它们构建为 DLL 并使用 NET.addAssembly();

将它们导入 matlab

我做的是:

  1. 将二进制文件 (File1.bin) 读入 byte[] 数组
// C#
byte[] data = File.ReadAllBytes();
  1. 使用 UDP 套接字发送字节数组。
// C#
sendClient.Send(data, data.Length);
  1. 将接收到的数据报写入另一个二进制文件(File2.bin)

在 matlab 中:

% Receive data...
fd = fopen('File2.bin','w');
for i=1 through the length of data:
    fprintf(fd, data(i));

我的问题是当我在 matlab 中使用 visdiff('File1.bin', 'File2.bin') 来比较 File1.bin 和 File2.bin 时,除了 [=48= 中的几个 (~30) 字节外,几乎所有内容都是相同的] 替换为 0x1A,我需要这两个文件相同。

如有任何帮助或建议,我们将不胜感激!

谢谢

注意:这是在一台机器上用两个不同的matlab完成的windows。

如果您需要更多信息,请告诉我。我无法复制和粘贴代码,因为它位于无法访问互联网的机器上。

更新:

经过多次调试,我发现问题发生在发送任何 UDP 数据报之前。使用 C# ReadAllBytes() 和 Matlab fread() 两个输出数组都包含这些异常的 0x1A,但我仍然不知道为什么...

我相信我已经解决了这个问题。

当我将字节数组写入文件时,我使用了以下 Matlab 代码:

fd = fopen('file2.bin', 'w');
Data = server.Receive(); // This received UDP data as a System.byte[] array

for i=1:Data.Length
   fprintf(fd,'%c',char(Data(i)));
end

我假设这相当于一次写入文件 1 个字节,因为 char 的大小应该是 1 个字节。

然后我用以下代码替换了该代码:

fd = fopen('file2.bin', 'w');
Data = server.Receive(); // This received UDP data as a System.byte[] array

Data = uint8(Data);
fwrite(fd, Data);

进行此更改后,当我 运行 visdiff('file1.bin', 'file2.bin'); 时,这两个文件是相同的。我不太确定为什么我之前的版本不起作用,但也许这与 Sam Mason 提到的有关。

无论如何,谢谢你的帮助!