Java中的对等电子表格应用程序

时间:2012-05-29 14:58:15

标签: java multithreading sockets p2p

我有一个大学项目,我需要扩展现有的电子表格应用程序(CleanSheets - 开源)。

目前,它只是一个简单的电子表格应用程序。我被要求实现的是一个菜单选项,允许用户共享一个工作表(即用户选择'共享工作表' - 它是当前的 - 然后选择他们希望共享的区域:A1:A9,for例)。然后,他们可以指定本地端口并创建共享。

希望连接到该共享的其他用户必须知道计算机的IP和要连接的端口。一旦他们在名为“加入共享工作表”的菜单选项下输入该信息,那么该共享区域将显示在他们当前的工作表中,并且他们可以自由编辑并查看其他人在这些单元格中键入的内容。

每个人都有读/写访问权限 - 必须由线程控制(因为我们可以有1人共享,3个对等连接到该工作表,所有人都查看更改并自行创建)。必须保证多次排除(这可以使用信号量和/或重入锁定来完成)。

共享实现必须在对等体系结构中实现。

现在我的问题是:如何开始使用Java中的套接字进行开发?我已经阅读了一些Java文档,特别是有关JXTA的文档,但这很可能不是我需要的。我不需要复杂的P2P应用程序,只需要那种共享能力。

我假设我需要使用UDP(因为TCP主要是服务器客户端,任何人都可以是服务器或客户端),我不需要数据包控制。我已经知道C中的套接字。我应该在Java中使用哪些类与套接字相关?

1 个答案:

答案 0 :(得分:1)

java.io和java.net有一些你可能想看的有用的类。这是一个非常简单的例子,因为我忽略了捕获/投掷,但希望它能够显示你可以为tx / rx做些什么。

写入字节应该能够接受可序列化的内容。

发送数据:

// create connection
Socket cs = new Socket(<dest-hostname>, <port-num>);
DataOutputStream ds = new DataOutputStream(cs.getOutputStream() );

// send stuff
ds.writeBytes("is this thing on?");

// close socket and stream
cs.close();
cs = null;
ds = null;

Receive data:
ServerSocket listenSocket;
Socket s = listenSocket.accept();
BufferedReader receivedThing = new BufferedReader( new InputStreamReader( s.getInputStream() ) );

//assuming its plaintext
String msg = receivedThing.readLine();

// close the socker/serversocket

希望这会有所帮助。