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