android连接socket服务器上传下载多个文件
1.socket服务端SocketServer.java

public class SocketServer {
int port = ;// 端口号,必须与客户端一致
// 选择进行传输的文件(测试)
String path = "C:\\Temp";
String filePath = "E:\\img.png";
Socket client;
public static void main(String arg[]) {
System.out.println("-----准备建立socket链接----");
new SocketServer().start();
}
void start() {
try {
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。
client = serverSocket.accept();
try {
System.out.println("-----建立socket链接----");
// 向客户端发送多个文件(测试)
setMoreMessage(path);
} catch (Exception e) {
e.printStackTrace();
} finally {
client.close();
System.out.println("close");
}
}
} catch (Exception e) {
e.printStackTrace();
}
} // 向客户端发送信息
private void setMessage(String filePath, DataOutputStream ps)
throws IOException {
File fi = new File(filePath);
System.out.println("要发送的文件长度:" + (int) fi.length() + "字節");
// 向客户端发送信息
DataInputStream fis = new DataInputStream(new BufferedInputStream(
new FileInputStream(filePath)));
// 将文件名及长度传给客户端。中文名需要处理
ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong((long) fi.length());
ps.flush(); int bufferSize = ;
byte[] buf = new byte[bufferSize]; while (true) {
int read = ;
if (fis != null) {
read = fis.read(buf);
} if (read == -) {
break;
}
ps.write(buf, , read);
}
ps.flush();
fis.close();
System.out.println("文件中传输。。。");
} /**
* 向客户端发送多个文件
* @param path
* @throws IOException
*/
private void setMoreMessage(String path) throws IOException {
File root = new File(path);
if (!root.exists()) {
root.mkdir();
return;
}
String[] colum = root.list();
System.out.println("The file's num is :" + colum.length);
// 写入流
DataOutputStream ps = new DataOutputStream(client.getOutputStream());
// 写出流
DataInputStream dis = new DataInputStream(new BufferedInputStream(
client.getInputStream()));
// 写出文件总个数
ps.writeInt(colum.length);
ps.flush(); System.out.println(dis.readBoolean() ? "开始上传文件" : "开始上传失败");// 接收客户端返回的上传信息
System.out.println();
for (int i = ; i < colum.length; i++) {
System.out.println("The colum's content is :" + colum[i]);
String filePath = path + "\\" + colum[i];
setMessage(filePath, ps);// 上传文件
System.out.println(dis.readBoolean() ? "成功上传文件" : "上传失败");// 接收客户端返回的上传信息
}
System.out.println("-----文件传输完成------");
} // 接收客户端发送的信息
private void getMessage(DataInputStream inputStream) {
try {
// 本地保存路径,文件名会自动从服务器端继承而来。
String savePath = "D://android_img/";
File file = new File(savePath);
// 创建文件夹
if (!file.exists()) {
file.mkdirs();
}
int bufferSize = ;
byte[] buf = new byte[bufferSize];
int passedlen = ;
long len = ; savePath += inputStream.readUTF();
DataOutputStream fileOut = new DataOutputStream(
new BufferedOutputStream(new BufferedOutputStream(
new FileOutputStream(savePath))));
len = inputStream.readLong(); System.out.println("文件的长度为:" + len + "\n");
System.out.println("开始接收文件!" + "\n" + getTime()); while (true) {
int read = ;
if (inputStream != null) {
read = inputStream.read(buf);
}
passedlen += read;
if (read == -) {
break;
}
// 进度条,如果是大文件,可能会重复打印出一些相同的百分比
System.out.println("文件接收了" + (passedlen * / len) + "%\n");
fileOut.write(buf, , read);
}
// 花费的时间
System.out.println("接收完成,文件存为" + savePath + "\n" + getTime()); fileOut.close();
} catch (Exception e) {
System.out.println("接收消息错误" + "\n" + e.toString());
return;
}
}
public static String getTime() {
long tmp = System.currentTimeMillis();// 花费的时间
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy年-MM月dd日-HH时mm分ss秒");
Date date = new Date(tmp);
return formatter.format(date);
}
}

2.android客户端下文件ImageDownLoadUtil.java

/**
* 发送接收文件
* @ClassName: ClientTest
* @Description: TODO
* @author jalin
* @date 2014-4-16 上午11:37:30
*/
public class ImageDownLoadUtil extends Thread implements Runnable {
private ClientSocket client = null;
private Context context;
private String IP = "192.168.1.2";// 本地ip
private int PORT = ; // 端口号
private boolean resule = false;
String filePath = "";// android手机文件路径
String filename = "";//存放圖片的文件夾名
public int type = ;//模式
public boolean isContinue = true; public ImageDownLoadUtil(Context context) {
this.context = context;
this.filePath = Session.DATABASE_PATH;
filename=Session.IMAGE_FILENAME;
try {
if (createConnection()) {
// type = 2;//接受文件
// sendMessage();//发送文件、信息
type = ;//接受文件
this.start();
}
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 得到socket鏈接通道
* @return
*/
private boolean createConnection() {
client = new ClientSocket(IP, PORT);
try {
client.CreateConnection();
System.out.print("创建连接成功!");
return true;
} catch (Exception e) {
System.out.print("创建连接失败!");
return false;
}
}
@Override
public void run() {
switch (type) {
case :// 下载多個图片文件
resule = false;
if (client == null)
return;
DataInputStream inputStream = null;// 写入流
DataOutputStream out = null;// 写出流
try {
inputStream = client.getDataInputStream();// 写入流
out = client.getDataOutputStream();// 写出流 int fileLenght = inputStream.readInt();//得到文件總數量 out.writeBoolean(true);// 发送上传開始標誌
out.flush();
// 文件存储路径
String savePath = filePath + "/" + filename + "/";
while ((fileLenght--) > ) {
resule=saveFile(inputStream,savePath);// 保存图片
out.writeBoolean(resule);// 发送上传结果
out.flush();
}
} catch (Exception e) {
System.out.print("接收文件出错!");
return;
}finally{
Message msg=new Message();
if (resule) {
msg.what=;
}else{
msg.what=-;
}
handler.sendMessage(msg);
}
break; default:
break;
}
} /**
* 保存文件
* @param inputStream
* @return
*/
private boolean saveFile(DataInputStream inputStream,String savePath) {
boolean resule=false;
try {
if (!new File(savePath).exists()) {
new File(savePath).mkdir();
}
int bufferSize = * ;
byte[] buf = new byte[bufferSize];
int passedlen = ;
long len = ;
//得到文件名称
String saveFilePate=savePath +inputStream.readUTF();
File image = new File(saveFilePate);
if (image.exists()) {
image.delete();
}
DataOutputStream fileOut = new DataOutputStream(
new BufferedOutputStream(new BufferedOutputStream(
new FileOutputStream(saveFilePate))));
len = inputStream.readLong(); System.out.println("文件长度:" + len);
long tmp = System.currentTimeMillis();// 获取当前系统时间
System.out.println("开始发送时间:" + "\n" + tmp);
int redLen = ;
while (true) {
int read = ;
if (inputStream != null && passedlen < len) {//文件接收结束标志
read = inputStream.read(buf);
}
passedlen += read;
if (read == - || read == ) {
break;
}
//
System.out.println("当前进度:" + (passedlen * / len) + "%\n");
fileOut.write(buf, , read);
}
tmp = System.currentTimeMillis();// 当前时间
System.out.println("文件保存路径:" + saveFilePate + "---时间:" + tmp);
fileOut.close();
resule = true;
} catch (Exception e) {
System.out.println("出错了:" + e.toString());
return resule;
}finally{
}
return resule;
} /*
* 发送文件、信息
*/
private void sendMessage() {
if (client == null)
return;
try {
System.out.print("文件路径:" + filePath);
client.sendMessage(filePath);
} catch (Exception e) {
System.out.print("发送文件出错!");
}
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case :
// 执行定时器时间到了之后由handler传递的任务
Toast.makeText(context, "下载图片成功", Toast.LENGTH_LONG).show();
break;
case -:
// 执行定时器时间到了之后由handler传递的任务
Toast.makeText(context, "下载图片失败", Toast.LENGTH_LONG).show();
break;
}
super.handleMessage(msg);
}
};
}

3.Socket客戶端

/**
* Socket客戶端
*
* @ClassName: ClientSocket
* @Description: TODO
* @author jalin
* @date 2014-4-16 下午5:10:31
*/
public class ClientSocket {
private String ip; private int port; private Socket socket = null; private DataOutputStream out = null; private DataInputStream getMessageStream = null; public ClientSocket(String ip, int port) {
this.ip = ip;
this.port = port;
}
/**
* 创建socket连接
*
* @throws Exception
* exception
*/
public void CreateConnection() throws Exception {
try {
socket = new Socket(ip, port);
} catch (Exception e) {
e.printStackTrace();
if (socket != null)
socket.close();
throw e;
} finally {
}
}
/**
* 發送圖片
* @param filePath
* @throws Exception
*/
public void sendMessage(String filePath) throws Exception {
try {
// 获取本地文件
File file = new File(filePath);
getMessageStream = new DataInputStream(new BufferedInputStream(
new FileInputStream(filePath)));
out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(filePath);
// 发送文件属性
out.writeUTF(file.getName());
out.flush();
out.writeLong((long) file.length());
out.flush();
int bufferSize = * ;
byte[] buf = new byte[bufferSize];
while (true) {
int read = ;
if (getMessageStream != null) {
read = getMessageStream.read(buf);
} if (read == -) {
break;
}
out.write(buf, , read);
}
out.flush();
getMessageStream.close();
System.out.println("-----发送完成------");
} catch (Exception e) {
System.out.println(e.toString());
} finally {
if (out != null)
out.close();
}
} public DataOutputStream getDataOutputStream() {
try {
out = new DataOutputStream(socket.getOutputStream());
return out;
} catch (IOException e) {
e.printStackTrace();
try {
if (out != null) {
out.close();
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return null;
} public DataInputStream getDataInputStream() throws Exception {
try {
getMessageStream = new DataInputStream(new BufferedInputStream(
socket.getInputStream()));
return getMessageStream;
} catch (Exception e) {
e.printStackTrace();
if (getMessageStream != null)
getMessageStream.close();
throw e;
} finally {
}
} public int getFileLenght() {
try {
return getDataInputStream().readInt();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return -;
}
public void shutDownConnection() {
try {
if (out != null)
out.close();
if (getMessageStream != null)
getMessageStream.close();
if (socket != null)
socket.close();
} catch (Exception e) { }
}
}

4.activity按钮事件 new ImageDownLoadUtil(this);

Android连接socket服务器上传下载多个文件的更多相关文章

  1. 向linux服务器上传下载文件方式收集

    向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...

  2. Linux下不借助工具实现远程linux服务器上传下载文件

    # Linux下不借助工具实现远程linux服务器上传下载文件 ## 简介 - Linux下自带ssh工具,可以实现远程Linux服务器的功能- Linux下自带scp工具,可以实现文件传输功能 ## ...

  3. Python 一键上传下载&一键提交文件到SVN入基线工具

    一键上传下载&一键提交文件到SVN入基线工具   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用说明 1   注: 根据我司项目规则订制的一套工具,集成以下功能,源码 ...

  4. 【转】Android 服务器之SFTP服务器上传下载功能

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  5. 【转】Android 服务器之SFTP服务器上传下载功能 -- 不错

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  6. SFTP远程连接服务器上传下载文件-qt4.8.0-vs2010编译器-项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,Qt4.8.0版本,vs2010编译器 qt4.8.0-vs2010编译器项目实例下载地址:CSD ...

  7. Android+Spring Boot 选择+上传+下载文件

    2021.02.03更新 1 概述 前端Android,上传与下载文件,使用OkHttp处理请求,后端使用Spring Boot,处理Android发送来的上传与下载请求.这个其实不难,就是特别多奇奇 ...

  8. java 通过sftp服务器上传下载删除文件

    最近做了一个sftp服务器文件下载的功能,mark一下: 首先是一个SftpClientUtil 类,封装了对sftp服务器文件上传.下载.删除的方法 import java.io.File; imp ...

  9. Spring学习---Spring中利用组件实现从FTP服务器上传/下载文件

    FtpUtil.java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcepti ...

随机推荐

  1. flash3D学习1

    今天正式学习flash3D. 先配置: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0 ...

  2. cigarette

    #include<iostream> using namespace std; int main() { int N; cin>>N; while(N--) { int Who ...

  3. 80.简单搭建nodeJS服务,访问本地站点文件

    转自:https://blog.csdn.net/iteye_1217/article/details/82679843 搭建nodejs服务器步骤: 1.安装nodejs服务(从官网下载安装),no ...

  4. BZOJ 1066 Dinic

    思路: 网络流 建边比较麻烦 //By SiriusRen #include <queue> #include <cstdio> #include <cstring> ...

  5. MVC权限验证过滤器

    Action属性,权限设定属性   [AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)] ...

  6. jmind-redis一个redis的nio客户端

    Redis是一个基于key/value的系统.Redis目前最新版本是2.2.4,用着很不错,不过java版本的客户端比较的不给力,目前redis 客户端jedis 是基于io 的socket . 而 ...

  7. Python标准库:内置函数ascii(object)

    这个函数跟repr()函数一样,返回一个可打印的对象字符串方式表示.当遇到非ASCII码时,就会输出\x,\u或\U等字符来表示. 与Python 2版本号里的repr()是等效的函数. 样例: #a ...

  8. [Servlet]研究ServletContext对象

    作者信息 作者姓名:金云龙 个人站点:http://www.longestory.com 个人公众帐号:搜索"longestory"或"龙哥有话说" Servl ...

  9. C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

    C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...

  10. es67

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...