Java DatagramSocket-在一个数据包中发送多个值

Java DatagramSocket-在一个数据包中发送多个值,java,udp,datagram,Java,Udp,Datagram,我试图通过UDP在一个数据包中发送多个值。我使用ByteArrayOutputStream在字节数组中写入字节,并使用ByteArrayInputStream在服务器端读取这些值。问题是,我可以通过tearrayoutputstream写入的最大值是255,可以正确读取,但我需要发送更大的值。这是我的服务器端代码 public class Server implements Runnable { private DatagramSocket socket; private bo

我试图通过UDP在一个数据包中发送多个值。我使用
ByteArrayOutputStream
在字节数组中写入字节,并使用
ByteArrayInputStream
在服务器端读取这些值。问题是,我可以通过tearrayoutputstream写入的最大值是255,可以正确读取,但我需要发送更大的值。这是我的服务器端代码

public class Server implements Runnable {

    private DatagramSocket socket;
    private boolean running;
    private byte[] buf = new byte[1024];

    public Server() throws SocketException {
        socket = new DatagramSocket(4445);
    }

    @Override
    public void run() {
        while (true) {
            try {
                DatagramPacket packet
                        = new DatagramPacket(buf, buf.length);
                socket.receive(packet);

                ByteArrayInputStream bInput = new ByteArrayInputStream(buf);

                System.out.println(bInput.read());
                System.out.println(bInput.read());


            } catch (IOException e) {

            }
        }
    }
}
对于客户端来说也是如此

public class Main {

    private static InetAddress ip;


    public static void main(String[] args) throws IOException {
        ip = InetAddress.getLocalHost();
        Runnable server = new Server();
        new Thread(server).start();

        DatagramSocket ds = new DatagramSocket();
        byte[] data = new byte[1024]; // Max length

        DatagramPacket packet = new DatagramPacket(data, data.length);
        packet.setAddress(ip);
        packet.setPort(4445);

        ByteArrayOutputStream ba = new ByteArrayOutputStream();
        as.write(5);
        as.write(300);
        packet.setData(ba.toByteArray());

        ds.send(packet);
  }
}

因此,我可以从
ByteArrayInputStream
获取数字5,但任何大于255的值都被错误地恢复

当您发送多个值时,问题在于使用字节的
ByteArray
as.write(300)
实际上将
300
转换为
byte
并写入
44
哦,是的,你是对的,但是我如何才能在一个数据包中发送多个具有正确值的值呢?将
ByteArrayOutputStream
封装在
数据输出流中:然后你可以发送任何你喜欢的原语。在接收器处,将
ByteArrayInputStream
包装在
数据输入流
中。注意,它应该是
ByteArrayInputStream bInput=newbytearrayinputstream(buf,0,packet.getLength())
@user207421如果可能的话,你能发布一个代码示例吗?我已经提供了大约一半。只要查一下Javadoc。这并不难。注意:发送方中的数据是无效的。最好先通过tearrayoutputstream执行
部分,然后再执行
新数据包(ba.toByteArray(),ba.toByteArray().length,ip,4445)
并完全避免所有
集合。您正在发送多个值,问题是
字节数组
可以处理字节
as.write(300)
实际上将
300
转换为
byte
并写入
44
哦,是的,你是对的,但是我如何才能在一个数据包中发送多个具有正确值的值呢?将
ByteArrayOutputStream
封装在
数据输出流中:然后你可以发送任何你喜欢的原语。在接收器处,将
ByteArrayInputStream
包装在
数据输入流
中。注意,它应该是
ByteArrayInputStream bInput=newbytearrayinputstream(buf,0,packet.getLength())
@user207421如果可能的话,你能发布一个代码示例吗?我已经提供了大约一半。只要查一下Javadoc。这并不难。注意:发送方中的数据是无效的。最好先通过tearrayoutputstream执行
部分,然后再执行
新数据包(ba.toByteArray(),ba.toByteArray().length,ip,4445)并完全避免所有
设置。