Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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_File_Networking - Fatal编程技术网

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

如何使用Java通过网络将文件从一台计算机传输到另一台计算机?,java,file,networking,Java,File,Networking,我需要一个简单的应用程序,最好是跨平台的,能够在两台计算机之间发送文件 它只需要接受和发送文件,并显示一个进度条。我可以使用什么应用程序或如何编写应用程序?您可以使用Java中的套接字编程来编写应用程序。您需要编写一个服务器和一个客户端程序。服务器将使用ServerSocket侦听连接,客户端将使用套接字在指定端口上连接到该服务器 这里有一个教程:请查看教程,这是一个非常基本的示例。您可能还希望在发送实际文件之前发送控制头,包含文件大小、文件名等 另一方面,基于现有协议,如Proj.,我将强烈考

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


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

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

这里有一个教程:

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


另一方面,基于现有协议,如Proj.

,我将强烈考虑使用FTP。Apache有一个FTP和一个


编辑:Spdene对HTTP的建议也很好,特别是如果每个人都有Java6。如果没有,您可以使用类似的工具。

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


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

Sun的Java 6包括一个轻量级的、可扩展的实现。您可以非常轻松地使用它来服务您的文件,使用URLConnection来获取它。

发送和接收文件

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

接收代码:

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
上,或者设置
setUndeterminate(false)
,以显示程序正在工作

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


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

Woof是一个很酷的Python脚本,可能适合您:

两个流行的应用程序是“scp”和“rsync”。这些是Linux上的标准配置,通常在Unix上可用,并且可以在cygwin下的Windows上运行,不过您可能会找到同样可以运行的Windows本机应用程序。(PuTTY可作为SCP客户机)

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


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

可以更有效地通过网络传输。看看这一点,它解释了通过零拷贝进行高效数据传输的原因

您是推送还是拉送文件?上传还是下载?为什么不?做起来很快,而且用Java就可以了。一开始做起来很快(而且有很好的学习经验),但在生产中维护起来很慢。是的,我可以。。但是我想要一个尽可能简单的东西,这样初学者就不需要安装任何东西。。。除了安装Java之外,我认为大多数人已经安装了Java。除了JRE之外,你肯定还需要代码。唯一的问题是您是自己编写代码,还是使用现有的库。如果您自己编写,它可能是非标准的,您必须自己维护。谢谢,这就是我要找的。@jjinguy如果计算机不在局域网中,我们应该为连接设置什么IP地址?例如,我的外部IP地址是1.2.3.4,但如果您将1.2.3.4作为连接地址,路由器将如何知道将数据包转发到哪台计算机(在我的家庭网络内)?@Pacerier您的路由器应该为您处理地址转换。@jjinguy,是的,但是发送方如何知道将数据包发送到哪个端口,以便正确路由?关于@Pacerier的更多信息,我认为它应该与您在套接字上指定的端口相同。不幸的是,我不是网络专家,所以我不能提供更多信息。@jjinguy,假设路由器-a通过端口30000(预配置)向路由器-B发送数据包,路由器-B接收数据包,但它如何知道该数据包将转发给计算机-a,而不是计算机-B?