2014-11-05 1 views
0

У меня есть программа на C#, которая делает tcp-соединение с другой программой C#. В C# программы, чтобы отправить сообщение, я сделал это:BinaryWriter to MemoryStream в Java

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#.

Спасибо за помощь.

+0

Как я уже говорил в других сообщениях другим людям, вместо того, чтобы общаться через старые/проприетарные форматы сообщений, почему бы не использовать JSON или XML для этих сообщений? – ControlAltDel

ответ

0

Если вы хотите использовать DataOutputStream, вы можете обернуть его вокруг BufferedOutputStream и выполнить флеш(), когда все будет готово.

Или вы можете использовать ByteBuffer для NIO и записать его в сокет.

Чтобы сделать сообщение проще для декодирования, я бы добавил длину к началу, если вы не знаете, что каждое сообщение будет такой длины.

+0

Итак, как вы сказали, я использовал ByteArrayOutputStream, но у него нет writeDouble func, только int. Что я могу сделать ? – RonYamin

+0

Вам все еще нужен DataOutputStream. Как я уже сказал, я бы использовал BufferOutputStream, чтобы делать то, что вы хотите. –

+0

Поможете ли вы мне решить эту проблему? пожалуйста, я действительно не знаю, что делать. – RonYamin