我有一个Java电子表格应用程序,它提供的功能之一(我开发的)是工作表共享。基本上,任何人都可以是客户端或服务器,因为该应用程序同时具有服务器和客户端代码。作为服务器的用户创建共享,指定IP,然后创建并激活共享(最佳情况场景),服务器在其IP和选定端口上侦听客户端。
对于自动发现,我通过UDP广播使用DatagramSockets,而'真实通信'是基于TCP的(在客户端已经连接之后)。但是,我正在尝试通过UDP套接字发送List
,我不知道该怎么做。 List
包含我需要发送给客户端的服务器上的活动共享,因此它知道它可以连接到什么。
它是这样的:
客户 - >通过向网络发送数据包来查找活动服务器 - >服务器侦听并发回数据包。这个数据包应该是List
(如果可以通过这种套接字发送它)。
有人能解释我的问题吗?谢谢。
答案 0 :(得分:3)
您可以在发送之前将List转换为byte [],并使用Java Serialization将其转换回接收器上的List。
// 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();
只需确保列入List的所有对象都实现Serializable。