在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android使用socket上传、下载文件

android使用socket上传、下载文件

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.92M
  • 下载次数:44
  • 浏览次数:1203
  • 发布时间:2015-07-12
  • 实例类别:Android平台开发
  • 发 布 人:wangpeng0212
  • 文件格式:.zip
  • 所需积分:2
 相关标签: Android 上传 Socket 文件 下载

实例介绍

【实例简介】socket上传下载文件,含服务器端 以及客户端 完整代码

【实例截图】

【核心代码】

android客户端代码:


package net.testSocket;

import java.net.*;
import java.io.*;

public class ClientSocket {
    private String ip;

    private int port;

    private Socket socket = null;

    DataOutputStream out = null;

    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 {
        }
    }

    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 = 1024*8;
            byte[] buf = new byte[bufferSize];
            while (true) {
                int read = 0;
                if (getMessageStream != null) {
                    read = getMessageStream.read(buf);
                }

                if (read == -1) {
                    break;
                }
            out.write(buf, 0, read);
            }
            out.flush();
            getMessageStream.close();
            System.out.println("-----发送完成------");
        } catch (Exception e) {
            System.out.println(e.toString());
        } finally {
        	if (out != null)
                out.close();
        }
    }

    public DataInputStream getMessageStream() 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 void shutDownConnection() {
        try {
            if (out != null)
                out.close();
            if (getMessageStream != null)
                getMessageStream.close();
            if (socket != null)
                socket.close();
        } catch (Exception e) {

        }
    }
}


服务器端代码:


package com.server.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ServerTest {
    int port = 8888;//端口号,必须与客户端一致
    // 选择进行传输的文件(测试)
    String filePath = "E:\\img1.png";
    Socket client;
    void start() {
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            while (true) {
            	client = serverSocket.accept();
                try {
					// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。
					System.out.println("-----建立socket链接----");
					//接受客户端信息
					DataInputStream dis = new DataInputStream(new BufferedInputStream(client.getInputStream()));
//					System.out.println(dis.readLine());//接收文字信息
					//接收客户端发送的文件
					getMessage(dis);
					//向客户端发送文件(测试)
//					setMessage(filePath);
					dis.close();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
		        	client.close();
					System.out.println("close");
				}
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //向客户端发送信息
    private void setMessage(String filePath) throws IOException{
    	File fi = new File(filePath);
        System.out.println("要发送的文件长度:"   (int) fi.length());
    	//向客户端发送信息
        DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
        DataOutputStream ps = new DataOutputStream(client.getOutputStream());
        //将文件名及长度传给客户端。中文名需要处理
        ps.writeUTF(fi.getName());
        ps.flush();
        ps.writeLong((long) fi.length());
        ps.flush();

        int bufferSize = 8192;
        byte[] buf = new byte[bufferSize];

        while (true) {
            int read = 0;
            if (fis != null) {
                read = fis.read(buf);
            }

            if (read == -1) {
                break;
            }
            ps.write(buf, 0, read);
        }
        ps.flush();
        fis.close();
        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 = 8192;
            byte[] buf = new byte[bufferSize];
            int passedlen = 0;
            long len=0;
            
            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 = 0;
                if (inputStream != null) {
                    read = inputStream.read(buf);
                }
                passedlen  = read;
                if (read == -1) {
                    break;
                }
                //进度条,如果是大文件,可能会重复打印出一些相同的百分比
                System.out.println("文件接收了"    (passedlen * 100/ len)   "%\n");
                fileOut.write(buf, 0, 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);
    }
    public static void main(String arg[]) {
    	System.out.println("-----准备建立socket链接----");
        new ServerTest().start();
    }
}


实例下载地址

android使用socket上传、下载文件

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警