【问题标题】:BinaryWriter to MemoryStream in JavaJava 中的 BinaryWriter 到 MemoryStream
【发布时间】:2014-11-05 19:13:31
【问题描述】:

我有 C# 程序与另一个 c# 程序建立 tcp 连接。在 c# 程序中发送消息我这样做了:

private TcpClient client;

private void SendPulse()
{
    byte[] send_Buffer;
    port = 11000;

    while (true)
    {
        lock (locked)
        {
            try
            {
                BlockID = 1003;
                using (MemoryStream ms = new MemoryStream())
                {
                    using (BinaryWriter w = new BinaryWriter(ms))
                    {
                        NetworkStream stream = client.GetStream();
                        BlockID = 1003;
                        LengthMessage = 84;

                        // Header : 
                        w.Write(BeginMessage);
                        w.Write(BlockID);
                        w.Write(LengthMessage);
                        w.Write(RadarID);
                        w.Write(Time);
                        w.Write(ModeSystem);
                        w.Write(Icd_primary_var);
                        w.Write(Icd_secondary_ver);

                        // Data :
                        w.Write(StatusSystem);
                        send_Buffer = ms.ToArray();

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

                        Thread.Sleep(3000); // Send pulse every 3 seconds.
                    }
                }
            }
            catch
            {

            }
        }
    }
}

这个想法是在 binarywriter 中写入,然后将我们写入的内存转换为字节数组并发送它。

现在我有 Java 编程。我也想这样做,我与 C# 有联系,但我不知道如何发送它。我做了 DataOutputStream 但它单独发送每个参数,我希望全部在 1 个字节数组中,就像在 c# 代码中一样。

感谢帮助。

【问题讨论】:

  • 正如我在其他帖子中对其他人所说的,与其通过旧的/专有的消息格式进行通信,为什么不使用 JSON 或 XML 进行这些通信?

标签: java c# tcp binarywriter


【解决方案1】:

如果你想使用 DataOutputStream,你可以将它包裹在一个 BufferedOutputStream 上,并在完成后对其进行 flush()。

或者您可以使用 NIO ByteBuffer 并将其写入套接字。

为了使消息更容易解码,我会在开头添加长度,除非您知道每条消息都是该长度。

【讨论】:

  • 好的,正如你所说,我使用了 ByteArrayOutputStream,但它没有 writeDouble func,只有 int。我能做什么?
  • 您仍然需要 DataOutputStream。就像我说的,我会使用 BufferOutputStream 来做你想做的事。
  • 你能帮我解决它吗?请问我真的不知道该怎么办。
  • 用缓冲的输出流包装套接字输出流,用数据输出流包装它。写下你想要的,flush() 发送。注意:java 默认为大端,我假设 C# 使用小端。
  • 我写:out.writedouble --- 8 个字节。在 c# 中,我通过 binaryReader 的 readDouble 函数读取了 8 个字节,但读取错误。该怎么办 ?搞什么鬼 ? :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2012-09-02
相关资源
最近更新 更多