Android 通过SOCKET下载文件的方法
本文实例讲述了Android通过SOCKET下载文件的方法。分享给大家供大家参考,具体如下:
服务端代码
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class FunctionServer {
private static int PORT = ;
private String path = "需要下载的文件所在路径";
public static void main(String[] args) throws IOException{
FunctionServer server = new FunctionServer();
server.start();
}
public void start() throws IOException{
ServerSocket ss = new ServerSocket(PORT);
while(true){
Socket s = ss.accept();
new Service(s).start();//创建线程
}
}
class Service extends Thread{
Socket s;
public Service(Socket s){
this.s = s;
}
public void run(){
try{
InputStream in = s.getInputStream();//得到输入流
Scanner sc = new Scanner(in);
OutputStream out = s.getOutputStream();
while(true){
String str = sc.nextLine();//读取文件名
if(!str.equals(null)){
System.out.println("你的文件名是"+str);
//根据路径和文件名获取文件
File f = new File(path+str);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(new BufferedInputStream(fis));
byte[] buffer = new byte[];
DataOutputStream ps = new DataOutputStream(out);
ps.writeLong((long) f.length());//发送文件大小
ps.flush();
while(true) {
int read = ;
if(dis!=null){
read = fis.read(buffer);
}
if(read == -){
break;
}
ps.write(buffer,,read);
}
ps.flush();
dis.close();
s.close();
out.flush();
break;
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
客户端代码,下载线程
class DownloadThread extends Thread {
Socket socket;
InputStream in;
OutputStream out;
String path = "文件保存路径";
String functionName;
String serverIp = "服务器IP";
int socketPort = "服务端口号";
int fileSize,downLoadFileSize;
public DownloadThread(String functionName) {
this.functionName = functionName;
}
@Override
public void run() {
Looper.prepare();
while(!Thread.interrupted()){
try {
socket = new Socket(serverIp, socketPort);
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
out.write((functionName + "\n").getBytes("gbk"));
out.flush(); // 清理缓冲,确保发送到服务端
File f = new File(path + functionName);
OutputStream song = new FileOutputStream(f);
DataInputStream dis = new DataInputStream(
new BufferedInputStream(in));
DataOutputStream dos = new DataOutputStream(
new BufferedOutputStream(song));
fileSize = (int) dis.readLong() - ;
System.out.println("开始下载");
byte[] buffer = new byte[];
while (true) {
int read = ;
if (dis != null) {
read = dis.read(buffer);
downLoadFileSize += read;
}
if (read == -) {
break;
}
dos.write(buffer, , read);
}
System.out.println("文件下载完成");
dos.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
this.interrupt();
}
}
}
}
基本可以直接用,根据自己需要稍微改动就OK了
希望本文所述对大家Android程序设计有
Android 通过SOCKET下载文件的方法的更多相关文章
- .net下载文件的方法
最近做项目遇到文件下载的问题,原本采用的是直接用一个href链接到需要下载的文件来处理这个问题,后来发现,如果文件是一个图片,浏览器会自动打开图片而不是下载,需要用户右击另存为才可以下载,很不友好,后 ...
- Android利用Http下载文件
Android利用Http下载文件 一.场景 下载存文本文件和下载如mp3等大容量的文件 界面 二.代码编写 1.AndroidMainfest.xml中配置 主要是解决网络权限和写SDCard的权限 ...
- .net中下载文件的方法(转)
.net中下载文件的方法 一.//TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) ...
- Javaweb向服务器上传文件以及从服务器下载文件的方法
先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...
- 教你如何在 Android 使用多线程下载文件
# 教你如何在 Android 使用多线程下载文件 前言 在 Android 日常开发中,我们会经常遇到下载文件需求,这里我们也可以用系统自带的 api DownloadManager 来解决这个问题 ...
- linux 从百度网盘下载文件的方法
linux 从百度网盘下载文件的方法 发表于2015 年 月 日由shenwang 方法1.wget wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括 ...
- android intent打开各种文件的方法
android intent打开各种文件的方法 1./** * 检测是否安装了某个软件 * * @param pkgName "com.bill99.kuaishua" ...
- Unity3d C# Socket 下载文件 (同步到)
续篇 Unity3d C# HttpWebRequest 异步下载文件 ,由于project编译为IL2CPP的情况下仍然无效.提示HttpWebrequest 在当前版本号不支持.所以还是寻求其他的 ...
- android NDK的下载-文件太大
需要FQ,建议使用VPN,下载前准备点时间配置网络环境.我的百度网盘好像有~~不过忘记地址了,改天共享,或者私聊我. 2015.4 Android 5.1 Android Studio https:/ ...
随机推荐
- cf 828 A. Restaurant Tables
A. Restaurant Tables time limit per test 1 second memory limit per test 256 megabytes input standard ...
- JS对浏览器Cookie的操作,查询、设置以及删除
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一 ...
- BZOJ2115: [Wc2011] Xor(Dfs树,Xor线性无关组)
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
- IDEA下使用maven的mybatis错误—XXXDao is not known to the MapperRegistry
# IDEA下使用maven的mybatis常见错误(二) 错误类型二:mybatis.xml注册映射文件错误 错误提示:Type interface com.aynu.dao.CountryDao ...
- unzip---解压缩“.zip”压缩包。
unzip命令用于解压缩由zip命令压缩的“.zip”压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新现有的文件: -l:显示压缩 ...
- BZOJ——1012: [JSOI2008]最大数maxnumber || 洛谷—— P1198 [JSOI2008]最大数
http://www.lydsy.com/JudgeOnline/problem.php?id=1012|| https://www.luogu.org/problem/show?pid=1198 T ...
- android--动态加载、插件化
需求驱动 随着业务发展需要和无线部门的拆分,各业务产品模块归属到各业务BU,原有无线App开发团队被分为基础框架.业务A.业务B.业务C等多个开发团队,从此App的开发和发布进入了一个全新模式.在这种 ...
- Onvif开发之服务端发现篇
服务端的开发相对来说比客户端稍微难一点,也就是给填充相关结构体的时候,需要一点一点的去查阅,验证各个结构中各个成员各自代表什么意思,以及对应的功能需要是那个接口实现,这是开发服务端最头疼的事情.(在开 ...
- POJ 3037 SPFA
题意: 思路: 我们可以发现 到每个点的速度是一样的 那这就成水题了-. 裸的SPFA跑一哈 搞定 //By SiriusRen #include <cmath> #include < ...
- BootStrap_Table 学习
https://blog.csdn.net/heting90/article/details/52248729 $("#realTime_Table").bootstrapTabl ...