使用Java中的UDP在网络上发送对象

我还没有找到我所遇到的问题的确切答案,所以无论如何我都会问这个问题,如果我这样做了,事实上,重新提出一个已被问过的问题,我道歉。

我正在为我的Java类做另一个实验任务,对于本周的实验,我必须让UDP服务器通过网络发送一个Message对象,然后我必须让UDP客户端读取该消息。 Message本身只是一个具有String消息和String用户名的Object; 相当随意。 消息是可序列化的。

现在,我遇到的问题是如何实际在DatagramPacket中通过网络发送消息对象? 实际的构造函数让我放入一个字节数组,数组的大小,InetAddress和端口号。 我的最后一个问题是:如何找出数组的大小,以及如何将我的Message转换为要发送的字节?

您需要将消息类序列化为字节数组。 这将是您发送的字节数组(并且在那时很容易获得大小)。

在客户端上,您需要将字节数组反序列化为Message对象。

Java提供了一组用于处理序列化/反序列化的类,要序列化的对象必须实现“Serializable”接口。

这样的东西会起作用:

// Serialize to a byte array ByteArrayOutputStream bStream = new ByteArrayOutputStream(); ObjectOutput oo = new ObjectOutputStream(bStream); oo.writeObject(messageClass); oo.close(); byte[] serializedMessage = bStream.toByteArray(); 

并在接收端:

 ObjectInputStream iStream = new ObjectInputStream(new ByteArrayInputStream(recBytes)); Message messageClass = (Message) iStream.readObject(); iStream.close(); 

注意,您应该创建一个在客户端和服务器之间共享的公共接口,这样可以轻松地对有效负载进行序列化/反序列化。