基本信息
源码名称:android使用socket上传、下载文件
源码大小:0.92M
文件格式:.zip
开发语言:Java
更新时间:2015-07-12
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
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(); } }