如何使用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脚本,可能对你有用:
我强烈考虑使用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下那样成熟,因此这可能更为可取。 此外,它限制远程访问目标计算机上定义的源/目标,而不是允许访问文件系统的任何(授权)部分。
通过网络更有效地传输。 看一下本文解释通过零拷贝进行有效的数据传输