Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的对等电子表格应用_Java_Multithreading_Sockets_P2p - Fatal编程技术网

Java中的对等电子表格应用

Java中的对等电子表格应用,java,multithreading,sockets,p2p,Java,Multithreading,Sockets,P2p,我有一个大学项目,需要扩展现有的电子表格应用程序(-opensource) 现在,它只是一个简单的电子表格应用程序。我被要求实现的是一个菜单选项,允许用户共享一张工作表(即,用户选择“共享一张工作表”-这是当前工作表-然后选择他们希望共享的区域:例如A1:A9)。然后他们可以指定一个本地端口并创建共享 希望连接到该共享的其他用户必须知道机器的IP和要连接的端口。一旦他们在名为“加入共享工作表”的菜单选项下输入该信息,那么该共享区域将出现在他们当前的工作表中,他们可以自由编辑和查看其他人在这些单元

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

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

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

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

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

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


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

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
//创建连接
插座cs=新插座(,);
DataOutputStream ds=新的DataOutputStream(cs.getOutputStream());
//送东西
ds.writeBytes(“这个东西开着吗?”);
//关闭套接字和流
cs.close();
cs=null;
ds=null;
接收数据:
ServerSocket listenSocket;
套接字s=listenSocket.accept();
BufferedReader receivedThing=新的BufferedReader(新的InputStreamReader(s.getInputStream());
//假设它是纯文本
字符串msg=receivedThing.readLine();
//关闭socker/serversocket

希望这能有所帮助。

我看了那个教程,但大部分内容都涉及客户机/服务器套接字。我真的不想这样——我的应用程序可以在任何计算机上运行,任何人都可以创建共享。它们并不都连接到专用服务器。@Lovato:这基本上只是意味着程序的每个副本都有客户端和服务器代码。共享电子表格使用“服务器”代码,连接到共享电子表格使用“客户端”代码。@JerryCoffin那么这是否意味着我使用TCP或UDP套接字,或者这对我的情况并不重要?UDP不会为收到的每个数据包发送“确认”。这是一个尽力而为的协议。它适用于速度非常重要的流式应用程序,删除一些数据是“可以接受的”,因为如果几秒钟前删除了视频帧,您就不想返回并插入视频帧。那是UDP。我认为你不想因为你正在做的事而得到它。对等不是真正的协议,它是一种技术,他们告诉你的是,他们不希望你建立一个中央服务器,而是希望你的应用程序在共享数据时成为服务器。JMS根本不适合这里。