我正在为我的大学建立一个实验室,我应该使用 UDP 通过客户端使用套接字将一些 arrayList 传输到服务器。 我进行了很多搜索,但仍然无法使其发挥作用。
到目前为止我在客户端
ArrayList <Integer> arr = new ArrayList<Integer>();
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
ObjectOutput oo = new ObjectOutputStream(bStream);
//here i add some code to fill the array..
oo.writeObject(arr);
byte [] buf=bStream.toByteArray();
upd.sendPacket(buf, clientSocket); //this is a method for sending packets
在服务器端我得到了
ByteArrayInputStream baos;
ObjectInputStream oos;
$这是实现代码的地方
else if (str.equals("max")) {
System.out.println("waitng for object to come");
upd.receivePacket(serverSocket, receiveData); //here i receive the datagram packet
baos = new ByteArrayInputStream(receiveData);
oos = new ObjectInputStream(baos);
ArrayList<Integer> arr = (ArrayList<Integer>)oos.readObject();
System.out.println(arr);
}
如果您能给我一些提示或只是解释一下如何执行此操作的逻辑,我将非常感激。
PS。 请不要告诉我如何使用 RMI 或任何其他方法来执行此操作,我只需要使用 UDP 来执行此操作。 谢谢最佳答案
UDP 是基于消息的,而不是像 TCP 那样基于流的。 UDP 不保证传送。它不保证接收方按照发送的顺序获取消息(数据报)。您应该将数据划分为 block 并对其进行正确排序,以便接收者可以将这些 block 重新组装回正在发送的内容。该练习可能是 TCP 如何处理所有这些细节的一个准备:)
UDP 数据报的最大大小为 64K,尽管所有实际应用都尝试将数据包大小限制为最大 MTU(以太网为 1500 减去 20 字节的 IPv4 header 再减去 8 字节的 UDP header = 1472)
也就是说,您可能希望向每个数据报添加一个小 header ,以指示数据有效负载的大小及其在应用程序“流”中的顺序。
我不使用 Java,所以我会向您推荐 examples用于 API 使用。
关于java - 如何通过 UDP 服务器/客户端发送数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6735186/