2017-07-18 4 views
-2

私は、UDPソケットを介して送信されたデータを受信して​​画面に出力するJavaプログラムを作成しました。受信したデータは、MATLABを使用してデータを送信する別のコンピュータから送信されます。私は確かに、matlabのシミュレーションはすべて、2倍のデータ型で2の定数値をとり、バイトパッカーを使ってデータをパックし、指定されたIPアドレスとポートにUDPブロックを介して送信するためです。私は同時にしかし、常に印刷された値がネットワーク経由で受信されるダブルタイプのUDPパケットデータを取得するにはどうすればよいですか?

4.7783097267364807 E -299で、データがうまく受信された1024

長さのバイト配列としてデータパケットを受信し、別のPC上でJavaコードを実行します。

私のコードがパケットから正しく目的のデータを取得しているか、ByteBuffer.wrap(.....)。getDouble()関数が正しく使用されているかどうかはわかりません。すべてのヘルプは大幅に

import java.io.*; 
import java.net.*; 
import java.nio.ByteBuffer; 

class receiver 
{ 
    public static void main(String args[]) throws Exception 
     { 
     DatagramSocket serverSocket = new DatagramSocket(1024); 
      byte[] receiveData = new byte[1024]; 
      byte[] sendData = new byte[1024]; 
      System.out.println("Listening..."); 

      while(true) 
       { 
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
        serverSocket.receive(receivePacket); 
        double data = ByteBuffer.wrap(receiveData).getDouble(); 
        System.out.println(data); 
       } 
     } 
} 
+1

バイトパッカーを使用してデータをパックし、受信したデータグラムの最初の8または16バイトの16進ダンプを指定します。 – EJP

答えて

1

をいただければ幸いあなたのコードは、仕様を指定して、適切ですが、Matlabのはあなたに0x0200000000000000(または短い何か:下記参照)を送っています。 doubleとしての2.0のビッグエンディアン表現は0x4000000000000000であるため、確かにあなたにはdoubleは送信されません。

彼らは実際にあなたを送っているものから2を取得するには、次の操作を行います。

ByteBuffer bb = ByteBuffer.wrap(receivePacket.getData(), 0, receivePacket.getLength()); 
bb.order(ByteOrder.LITTLE_ENDIAN); 

を次に、このために、個別に、次のことを試して、1作品まで:なし

long l = bb.getLong(); 
int i = bb.getInt(); 
short s = bb.getShort(); 
byte b = bb.getByte(); 

バッファアンダーフロー。バッファをラッピングする方法では、データグラムの長さを無視しているので、1バイト、2バイト、4バイト、または8バイトのどちらを送信しているかを知ることはできません。

+0

ありがとう。バイトb = bb.getByte();何がうまくいくのですか?他のステートメントは、アンダーフロー例外を引き起こします。ですから、wrap関数とbyteorder関数は正確に何をしますか? – Flower

+0

このようにmatlabを実行している他のPCに自分のPCからデータを送信したい場合、どうすればこのことをやっていくのか教えてください。 – Flower

+1

彼らは二重ではなくバイトを送りました。私が使用したwrapメソッドは、実際のデータグラムをデータグラムから取得した実際の長さにラップしました。リトルエンディアンの方法については文書化されていますが、MATLABが期待しているフォーマットに応じて、必要ではないかもしれませんが、私はあなたにアドバイスできません:Matlabが実際に受け取ることを期待する必要があります。 – EJP

関連する問題