Android socket 文件传输: 用于app更新,大文件上传下载
2016-08-22 09:59
495 查看
<span style="font-size:24px;">客户端上传文件</span>
/** * * @author lijp8 * @input intent 待传输文件的地址 * @function 将文件传输到服务器,并返回传输状态 */ class MyThread extends Thread{ private Intent intentThread; private Socket socket = null; private ArrayList<AttendencePerson> personArray =new ArrayList<AttendencePerson>(); //选择要传输的文件 //private String filePath= null; File fi= new File(DateBaseActivity.dbFilePath); public MyThread(Intent intent){ this.intentThread= intent; } @Override public void run(){ //定义消息 Message msg = new Message(); msg.what = 0x11; Bundle bundle = new Bundle(); bundle.clear(); try { //连接服务器 并设置连接超时为5秒 socket = new Socket(); socket.connect(new InetSocketAddress(DateBaseActivity.IP, 8888), 5000); //获取输出流 , 向服务器发送信息 DataOutputStream out=new DataOutputStream(socket.getOutputStream()); //向服务器发送消息 DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(DateBaseActivity.dbFilePath))); out.writeUTF(fi.getName()); out.flush(); out.writeLong((long)fi.length()); out.flush(); byte[] buf= new byte[(int)fi.length()]; while(true){ int read =0; if(fis!=null) { read=fis.read(buf); }else{ System.out.println("文件传输错误"); break; } if(read ==-1){ break; } out.write(buf, 0, read); } out.flush(); System.out.println("文件传输完成"); //获取输入流 , 接受服务器的信息 DataInputStream in = new DataInputStream(socket.getInputStream()); // 接收来自服务器的消息 String readMsg = in.readUTF(); bundle.putString("msg", readMsg); msg.setData(bundle); //发送消息 修改UI线程中的组件 myHandler.sendMessage(msg); //关闭各种输入输出流 in.close(); out.close(); socket.close(); } catch (SocketTimeoutException aa) { //连接超时 在UI界面显示消息 bundle.putString("msg", "服务器连接失败!请检查网络是否打开"); msg.setData(bundle); //发送消息 修改UI线程中的组件 myHandler.sendMessage(msg); } catch (IOException e) { e.printStackTrace(); Log.w("ljp", e.getClass().getName() + ": " + e.getMessage()); //连接超时 在UI界面显示消息 bundle.putString("msg", e.getClass().getName() + ": " + e.getMessage()); msg.setData(bundle); //发送消息 修改UI线程中的组件 myHandler.sendMessage(msg); } } } }
<span style="font-size:18px;">服务端下载程序</span>
<span style="font-size:18px;"></span>
<span style="font-size:18px;"></span><pre name="code" class="java"> class ServerDatabaseThread extends Thread{public void run() {try {//当前时间Date day=new Date();SimpleDateFormat df = new SimpleDateFormat("yyyy_MM_dd_HHmmss");ServerSocket ss=new ServerSocket(8888); ////创建一个ServerSocket对象,并让这个ServerSocket在8888端口监听int i=1;while(true){Socket socket=ss.accept(); //调用ServerSocket的accept()方法,接受客户端所发送的请求,如果客户端没有发送数据,那么该线程就停滞不继续try {//ObjectInputStream in=new ObjectInputStream(socket.getInputStream());//接收客户端信息DataInputStream in=new DataInputStream(socket.getInputStream());//接收客户端信息DataOutputStream out=new DataOutputStream(socket.getOutputStream()); //向客户端发送消息String savePath= "f:/test/"+df.format(day);long fileLen=0;int passedLen =0; // 传输进度savePath += in.readUTF(); //读取数据库文件名fileLen = in.readLong(); //文件长度System.out.println("数据库文件大小:"+fileLen);byte[] buf= new byte[(int)fileLen];DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));while(true){int read =0;if(passedLen>=fileLen)break;if(in!=null){read=in.read(buf);}else{System.out.println("文件传输错误");//out.writeUTF("文件传输错误");//out.flush();break;}passedLen+=read;if(read ==-1){break;}System.out.println( "文件传输进度为"+(passedLen*100/fileLen)+ "%");fileOut.write(buf, 0, read);}System.out.println("文件传输完成");passedLen=0;fileOut.close();out.writeUTF("数据库上传完成");out.flush();in.close(); //关闭流out.close();//关闭流socket.close();//关闭打开的socket} catch (Exception e) {System.out.println(e.getMessage());}}} catch (IOException e) {System.out.println(e.getMessage());}}}
相关文章推荐
- android连接socket服务器上传下载多个文件
- Android连接socket服务器上传下载多个文件
- Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]
- Socket 上传/下载文件 2
- Android学习系列(2)--App自动更新之通知栏下载
- Android网络编程之Socket方式上传对象序列化文件(客户端)
- socket 实现文件上传下载
- C# HttpWebRequest可断点上传,下载文件;SOCKET多线程多管道可断点传送大文件
- Android应用开发之使用Socket进行大文件断点上传续传
- Android网络编程之Socket方式上传对象序列化文件(服务器端)
- android实现上传大文件到服务器(socket)
- 在Activity中获取AsyncTask中更新progress的值,可用在文件的上传和下载同步显示进度
- 利用Socket 实现 FTP 文件上传和文件下载
- Android中Socket大文件断点上传
- android文件上传 socket实现
- socket的简单运用01---上传下载文件
- Android应用开发之使用Socket进行大文件断点上传续传
- android下载单个文件时时更新进度条
- socket 多线程实现文件上传下载
- Android中Socket大文件断点上传