如何从服务器下载文件

Gab*_*mas 3 java multithreading android

我对一般设计实现有疑问.希望比我更熟练的人帮助我.

我想做一个基于android客户端和java服务器的应用程序.本地wifi传输,没有3G.

基本上,客户端必须连接到服务器并使用代码请求下载文件.

我怎样才能做到这一点?

我知道的事情:

  • 我必须在客户端创建一个后台线程,以在SD卡中创建一个文件,并使用Handler更新进度条以与UI线程进行通信.

  • 服务器必须是多线程且无阻塞的.

  • 该文件是一个二进制文件,如mp3音频.所以服务器必须:

    1. 发送有关文件的信息:名称和总长度.
    2. 打开文件,读取并发送字节,直到它没有到达结尾.

  • 客户必须:

    1. 接收有关文件的信息并创建一个空文件.
    2. 读取字节并将其转储到空文件中.更新进度条.
    3. 收到所有字节后关闭文件.

我知道在C中实现客户端和服务器(非常糟糕)但我开始使用java完成的真实客户端 - 服务器应用程序.

问题:

  • 如何从服务器下载像mp3这样的二进制文件到客户端?

  • 我必须把我的服务器应用程序放在哪里?我想我必须创建一个jar,将它保存在一个文件夹中并在PC启动时执行它,对吗?

谢谢!

Chr*_*ach 5

如何从服务器下载像mp3这样的二进制文件到客户端?

要使用Java下载文件,您可以使用 URL.openStream();

http://download.oracle.com/javase/tutorial/networking/urls/readingURL.html

不要打印输出System.out.而是将其写入文件.

FileOutputStream fos = new FileOutputStreamm(new File("path_to_file.mp3");
int byte;

while ((byte= in.readLine()) != -1)
    fos.write(byte);
Run Code Online (Sandbox Code Playgroud)

我必须把我的服务器应用程序放在哪里? 除非你真的需要,否则不要实现服务器.如果可能,使用http-Server(Tomcat或Apache HTTPD).通过HTTP使您的文件可用.

如果您想使用Java Server,您应该编写一个Servlet并将其打包到-File中WAR:

http://docstore.mik.ua/orelly/java-ent/servlet/