当前位置: 首页 > 面试题库 >

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

袁安志
2023-03-14
问题内容

我还没有找到我所遇到问题的确切答案,所以无论如何我都会提出这个问题,如果我确实提出了已经提出的问题,我深表歉意。

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

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


问题答案:

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

在客户端上,您将需要将字节数组反序列化为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();

请注意,您应该创建一个在客户端和服务器之间共享的公共接口,这将使有效负载的序列化/反序列化变得容易。



 类似资料:
  • 然而,当我通过UDP实现它时,我错过了这种方法

  • 问题内容: 我正在尝试制作客户端/服务器Java应用程序。客户端和服务器都将在同一Wi-Fi网络上运行。服务器将在客户端知道的特定端口上运行。 我正计划通过网络从客户端为该特定端口发送多播消息以发现服务器。但是,我不太确定如何确定网络中的哪个IP收到了我的消息。 发送多播消息后,是否需要在客户端上创建套接字并侦听传入的数据包,以防服务器回复? 提前致谢。 问题答案: (1)服务器侦听预先安排的端口

  • 虽然之前我们已经提到过不建议直接使用 LogStash::Inputs::TCP 和 LogStash::Outputs::TCP 做转发工作,不过在实际交流中,发现确实有不少朋友觉得这种简单配置足够使用,因而不愿意多加一层消息队列的。所以,还是把 Logstash 如何直接发送 TCP 数据也稍微提点一下。 配置示例 output { tcp { host => "19

  • 问题内容: 我正在尝试使用UDP将序列化的对象从服务器进程发送到Java中的客户端进程。问题是客户端在接收方法上被阻止。有人可以帮忙吗? 这是用于发送对象的服务器代码: 这是用于接收对象的客户端代码: 我只想接收能够重构的对象,但无法接收数据包本身。 问题答案: 我最终不知道要完成什么,但是使用UDP并不是那么容易…主要原因是在DatagramPacket对象的说明中: 数据报包用于实现无连接包传

  • 导语 这一节讲述UDP编程的知识。UDP(UserDatagram Protocol即用户数据报协议)是一个轻量级的,不可靠的,面向数据报的无连接协议。对于UDP我们不再进行过多介绍,如果你对UDP不是很了解,而且不知道它有什么用,那么这里就举个简单的例子:我们现在几乎每个人都使用的腾讯QQ,其聊天时就是使用UDP协议进行消息发送的。就像QQ那样,当有很多用户,发送的大部分都是短消息,要求能及时响

  • 我正在构建一个使用UDP协议向客户端发送和接收UDP消息的服务器。客户端不断地“抛出”UDP消息到服务器,而服务器没有任何响应,当服务器“认为”它已经从某些客户端接收到足够的UDP消息时,它将发送一个信号消息(UDP消息)返回给客户端(这一次,客户端充当服务器),以防止它发送更多的消息。这里的问题是:服务器可以从客户端接收UDP消息。但是客户端(位于LAN网络后面)不能从服务器接收UDP消息。我如