2

データグラムソケット経由で整数配列を送信しようとしています。これを達成するための最良の方法は何ですか。私の送信コードは次のとおりです。

public void sendObj(Object obj) {
        try{
            byteArr = new ByteArrayOutputStream();
            objOut = new ObjectOutputStream(byteArr);
            objOut.writeObject(obj);
            byte[] b = byteArr.toByteArray();
            DatagramPacket dgram = new DatagramPacket(b, b.length, InetAddress.getByName("230.0.0.1"), 4446); // multicast
            socket.send(dgram);
            System.out.println("Package is sent!");
        }catch(Exception e){
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

受信コードは次のとおりです。

byte[] b = new byte[65535];
ByteArrayInputStream b_in = new ByteArrayInputStream(b);
DatagramPacket dgram = new DatagramPacket(b, b.length);

socket.receive(dgram); // blocks
ObjectInputStream o_in = new ObjectInputStream(b_in);
Object o = o_in.readObject();
dgram.setLength(b.length); // must reset length field!
b_in.reset(); //

ただし、受信すると、未知のヘッダー値 00000 に対して StreamException が返されます

4

2 に答える 2

0

メソッドを使用getbyte()してバイトを取得し、これらのバイトをデータグラムパケットインスタンスに入れてから、クライアントに渡すか、送信する必要があります...

使用する

arrayName.getBytes(); /// save this into some byte[] temp = new byte[size];

データグラムパケットを作成し、その引数を入れて送信します

于 2012-04-18T17:02:44.497 に答える
0

私たちは基本的な変更によってその問題を解決しました。「100200300...」のような文字列を使用して、要素を 2 つの 0' で区切って配列を記号化したので、そのように ArrayList を使用しませんでした。

于 2012-04-12T09:19:29.663 に答える