如何使用Java通过网络将文件从一台计算机传输到另一台计算机?

我需要一个简单的应用程序,最好是跨平台的应用程序,它可以在两台计算机之间发送文件。

它只需要接受并发送文件,并显示进度条。 我可以使用哪些应用程序或如何编写应用程序?

发送和接收文件

发送和接收文件基本上分为两段简单的代码。

收到代码:

ServerSocket serverSoc = new ServerSocket(LISTENING_PORT); Socket connection = serverSoc.accept(); // code to read from connection.getInputStream(); 

发送代码:

 File fileToSend; InputStream fileStream = new BufferedInputStream(fileToSend); Socket connection = new Socket(CONNECTION_ADDRESS, LISTENING_PORT); OutputStream out = connection.getOutputStream(); // my method to move data from the file inputstream to the output stream of the socket copyStream(fileStream, out); 

发送代码将在要发送文件时发送代码的计算机上运行。

接收代码需要放在一个循环中,这样每当有人想要连接到服务器时,服务器就可以处理请求,然后返回等待serverSoc.accept()。

为了允许在两台计算机之间发送文件,每台计算机都需要运行服务器(接收代码)来监听传入的文件,并且当他们想要发送文件时,他们都需要运行发送代码。

进度条

Swing中的JProgressBar很容易使用。 但是,让它正常工作并显示文件传输的当前进度稍微困难一些。

要在表单上显示进度条,只需将其放到JFrame然后设置setIndeterminate(false)这样就可以显示您的程序正在运行。

要正确实现进度条,您需要创建自己的SwingWorker实现。 Java教程在他们的并发课程中有一个很好的例子。

尽管如此,这是一个相当困难的问题。 如果您需要更多帮助,我建议您自己提出这个问题。

Woof是一个很酷的Python脚本,可能对你有用:

http://www.home.unix-ag.org/simon/woof.html

我强烈考虑使用FTP。 Apache有一个FTP 客户端和一个服务器

编辑:spdenne对HTTP的建议也很好,特别是如果每​​个人都有Java 6.如果没有,你可以使用像Tiny Java Web Server这样的东西。

您可以使用Java中的Socket编程编写一个。 您需要编写服务器和客户端程序。 服务器将使用ServerSocket侦听连接,客户端将使用Socket连接到指定端口上的该服务器。

这是一个教程: http : //www.javaworld.com/jw-12-1996/jw-12-sockets.html

Sun的Java 6包括轻量级HTTP服务器API和实现。 您可以相当轻松地使用它来提供文件,使用URLConnection来获取它。

看看这个教程,这是一个非常基本的例子。 您可能还希望在发送实际文件之前发送控制头,包含文件大小,文件名等。

或者,将其基于现有协议, 如此项目。

你可以在你的机器上(其中一个)安装FTP服务器吗?

如果可以,您只需使用FTP客户端(例如FileZilla,它有一个进度条)。

两个流行的应用程序是“scp”和“rsync”。 这些是Linux上的标准,通常可以在Unix上使用,并且可以在cygwin下的Windows上运行,尽管您也可以找到可以执行它的Windows本机应用程序。 (PuTTY可以充当SCP客户端)。

对于任何类型的PC到PC文件传输,您需要在目标PC上有一个监听器。 这可以是守护程序应用程序(或Windows系统进程),也可以是Unix风格的“超级服务器”,配置为在有人联系侦听端口时加载和运行实际的文件复制应用程序。

SCP和其中一种rsync模式确实需要某种远程登录function。 Rsync还可以发布它将处理目录的资源。 由于Windows“远程登录”的概念并不像在Linux下那样成熟,因此这可能更为可取。 此外,它限制远程访问目标计算机上定义的源/目标,而不是允许访问文件系统的任何(授权)部分。

通过网络更有效地传输。 看一下本文解释通过零拷贝进行有效的数据传输