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

时间:2009-07-10 12:44:28

标签: java file networking

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

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

9 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:5)

发送和接收文件

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

接收代码:

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教程在lesson in concurrency中有一个很好的例子。

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

答案 2 :(得分:3)

我强烈考虑使用FTP。 Apache有一个FTP client和一个server

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

Sun的Java 6包含轻量级HTTP server API和实现。你可以很容易地使用它来提供你的文件,使用URLConnection来获取它。

答案 5 :(得分:0)

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

或者,将其基于现有协议,如this project。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

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

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

答案 8 :(得分:0)

更有效地通过网络传输。看一下this article,它解释了通过零拷贝进行有效的数据传输