int数组在java中的数据报套接字编程中发送和接收

时间:2012-04-11 14:11:46

标签: java datagram

我尝试通过数据报套接字发送整数数组。实现这一目标的最佳方法是什么? 我的发送代码是:

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(); //

但是当我收到它时,会为未知标头值000​​00

提供StreamException

2 个答案:

答案 0 :(得分:0)

我们通过基本的改变解决了这个问题。我们使用像“100200300 ...”这样的字符串来通过将元素与两个0'分开来对数组进行符号化,这样我们就不会使用ArrayList了。

答案 1 :(得分:0)

您必须使用getbyte()方法获取字节并将这些字节放入数据报包实例中,然后将其传递给客户端或发送...

使用

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

制作数据报包并放入其argumnets并发送