java - 如何通过 UDP 服务器/客户端发送数组列表

标签 java sockets object network-programming udp

我正在为我的大学建立一个实验室,我应该使用 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/

相关文章:

java - Java每次都会重新编译每个文件吗?

Java当前时间api中的不同值

c++ - VS2010 缺少 ws2_32.lib。怎么办?

java - 在一行中多次引用一个对象

android - 如何在整个应用程序中保持 XMPP 连接有效?

java - 为什么 Gson 中的 TypeToken 构造如此奇怪?

java - JPA 忽略按列值映射

javascript - 使用 iojs 创建 http 请求时如何捕获 EHOSTDOWN 套接字错误?

node.js - id 未定义(sails.socket.emit)

java - Object.equals(Boolean, Boolean) 与逻辑运算符 (Java)