【问题标题】:Sending binary data via (C#)通过(C#)发送二进制数据
【发布时间】:2016-10-27 13:32:31
【问题描述】:

早上好,

我是网络编程的新手,但我一直在研究并掌握了设置服务器/客户端应用程序的基础知识。我想通过 TCP 从服务器向客户端发送二进制数据,以根据某些字段长度解析和打印整数。

我基本上是在创建一个虚拟服务器来发送网络数据,并希望我的客户端能够解析它。

我的想法是创建一个字节数组:byte[] data = {1,0,0,0,1,0,0,1) 来表示正在设置的 8 个字节。例如,客户端会读取前 2 个字节并打印 2,然后是接下来的 6 个字节并打印 9。

这是一个简单的例子。我想发送的字节数组是 864 字节。我会解析前 96、48、48 等。

这是一个很好的方法吗?如果不是,我应该如何发送 1 和 0?我发现了许多发送字符串的示例,但我想发送二进制数据。

谢谢。

【问题讨论】:

标签: c# network-programming tcpclient


【解决方案1】:

您似乎混淆了位和字节。 一个字节由 8 位组成,可以表示从 0 到 255 的整数值。 因此,您可以简单地将数组创建为:

byte[] data={2,9};

要发送其他原始数据类型(int、long、float、double...),您可以将它们转换为字节数组。

int x=96;
byte[] data=BitConverter.GetBytes(x);

然后可以将字节数组写入流

stream.Write(data,0,data.Length);

在客户端,将字节数组解析为:

int x=BitConverter.ToInt32(data,startIndex);

MSDN 对 TCP 客户端和侦听器有很好的参考。

https://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(v=vs.110).aspx

【讨论】:

  • 非常感谢。我有点糊涂了。我有想发送给自己并解析的结构。它们的位大小都不同。一个是 1280,另一个是 864 位。结构的前 96 位包含有关结构类型的信息(名称、类型、位置等)。我如何向自己发送一系列 1 和 0?
  • 如果它是一个结构,我建议将其作为逗号分隔的字符串发送,这样可以更容易在客户端进行解析。如果逗号是您发送的数据的一部分,您可以使用任何其他不常见的字符作为分隔符(我主要使用 |)
猜你喜欢
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 2012-10-11
  • 2011-10-14
相关资源
最近更新 更多