java - 通过DatagramSocket发送列表?

标签 java list sockets client

我有一个 Java 电子表格应用程序,它提供的功能之一(我开发的)是工作表共享。基本上,任何人都可以成为客户端或服务器,因为应用程序同时具有服务器和客户端代码。作为服务器的用户创建共享,指定 IP,然后创建并激活共享(最佳情况),服务器在其 IP 和选定端口上监听客户端。

对于自动发现,我通过 UDP 广播使用 DatagramSockets,而“真正的通信”是基于 TCP 的(在客户端已连接之后)。但是,我正在尝试通过该 UDP 套接字发送 List,但我不知道该怎么做。该列表包含服务器上的 Activity 共享,我需要将其发送给客户端,以便客户端知道可以连接到什么。

事情是这样的:

客户端 -> 通过向网络发送数据包来查找 Activity 服务器 -> 服务器监听并发回数据包。该数据包应该是List(如果可以通过这些类型的套接字发送它)。

有人能解答我的问题吗?谢谢。

最佳答案

您可以在发送之前将列表转换为 byte[],然后使用 Java 序列化将其转换回接收器上的列表。

    // Sender
    List list = new ArrayList();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ObjectOutputStream outputStream = new ObjectOutputStream(out);
    outputStream.writeObject(list);
    outputStream.close();

    byte[] listData = out.toByteArray();


    // Reciever
    ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(listData));
    list = inputStream.readObject();

只需确保放入列表中的所有对象都实现可序列化即可。

关于java - 通过DatagramSocket发送列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11013142/

相关文章:

Java ListIterator 性能

java:将对象添加到对象的ArrayList中;出现错误

java - 实体列表中某个值的出现频率

python - 基于另一个 'True'/'False'列表的列表的选择元素

c# - 如何确定哪个 EndPoint 导致错误代码 10054 的 SocketException? ("An existing connection was forcibly closed by the remote host.")

linux - 我可以使 TCP Keep-Alive 对称吗?

java将数组列表显示到文本字段

Javascript 数组 - 合并多个数组帮助

java - 从返回的 HashMap 中获取列表

sockets - Socket 和 RPC 有什么区别?