java数据报socket编程中int数组的发送和接收

java数据报socket编程中int数组的发送和接收,java,datagram,Java,Datagram,我尝试通过数据报套接字发送一个整数数组。实现这一目标的最佳方式是什么。 我的发送代码是: public void sendObj(Object obj) { try{ byteArr = new ByteArrayOutputStream(); objOut = new ObjectOutputStream(byteArr); objOut.writeObject(obj); byte

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

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(); //
接收代码为:

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,我们通过基本的更改解决了这个问题。我们使用了一个类似“100200300…”的字符串,通过用两个0'分隔元素来表示数组,因此我们没有使用ArrayList。

我们通过一个基本的更改解决了这个问题。我们使用类似“100200300…”的字符串通过用两个0分隔元素来表示数组,因此我们没有使用ArrayList。

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

使用


然后制作一个数据报包并放入其参数网并发送它

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

使用


然后做一个数据包,把它的argumnet放进去,然后发送出去

我相信你从来没有初始化过b的值。这个问题现在解决了吗?我相信你从来没有初始化过b的值。或者,这个问题现在解决了吗?