java - Java 中的点对点电子表格应用程序

标签 java multithreading sockets p2p

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

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

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

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

共享实现必须在对等架构中实现。

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

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

最佳答案

java.io 和 java.net 有一些您可能想要查看的有用的类。这是一个非常简化的示例,因为我忽略了捕捉/ throw ,但希望它能展示您可以为 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

希望这有帮助。

关于java - Java 中的点对点电子表格应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801673/

相关文章:

java - 使用 queueEvent() 在渲染器和另一个类之间传递变量

c - 处理多个 UDP 流

也发送文件的Java聊天程序

java - Redis在java中排队,一次只执行一个任务

java - 什么布局管理器会做这个?

java - 在 Windows 7 SWT 4.3 上 setSelection 不会移动文本末尾的插入符号

java - 为什么在 PaintComponent(Graphics g) 方法中使用 if 语句会使该方法中的所有代码无效?

python - 在 Python 中处理线程连接的正确方法

iphone - 在 WiFi 重新连接和设备重新启动 (iOS) 上维护 VoIP 套接字?

multithreading - 批处理作业与 CPU 密集型任务和调度