Android网络编程只局域网传输文件
Android网络编程之局域网传输文件:
首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件
具体代码如下:
package com.jiao.filesend; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; import android.os.Environment; /**
* Socket管理类
* 1、接收文件
* 2、发送文件
* @author jiaocg
*
*/
public class SocketManager {
private ServerSocket server;
public SocketManager(ServerSocket server){
this.server = server;
}
//接收文件
public String ReceiveFile(){
try{
//接收文件名
Socket name = server.accept();
//获取数据的输入流
InputStream nameStream = name.getInputStream();
//字符流转换为字节流
InputStreamReader streamReader = new InputStreamReader(nameStream);
BufferedReader br = new BufferedReader(streamReader);
//接收到文件名
String fileName = br.readLine();
br.close();
streamReader.close();
nameStream.close();
name.close();
//接收文件数据
Socket data = server.accept();
InputStream dataStream = data.getInputStream();
String savePath = Environment.getExternalStorageDirectory().getPath() + "/" + fileName;
FileOutputStream file = new FileOutputStream(savePath, false);
byte[] buffer = new byte[1024];
int size = -1;
while ((size = dataStream.read(buffer)) != -1){
file.write(buffer, 0 ,size);
}
file.close();
dataStream.close();
data.close();
return fileName + "---接收完成"+"---保存至:"+savePath;
}catch(Exception e){
System.out.println(e.toString());
return "接收错误:\n" + e.getMessage();
}
} //发送文件
public String SendFile(String fileName, String path, String ipAddress, int port){
try {
//发送文件名
//首先发送文件名
Socket name = new Socket(ipAddress, port);
//创建输出流
OutputStream outputName = name.getOutputStream();
//字符流转换为字节流
OutputStreamWriter outputWriter = new OutputStreamWriter(outputName);
//缓冲区
BufferedWriter bwName = new BufferedWriter(outputWriter);
//写到缓冲区
bwName.write(fileName);
bwName.close();
outputWriter.close();
outputName.close();
name.close(); //发送文件数据
Socket data = new Socket(ipAddress, port);
//创建输出流
OutputStream outputData = data.getOutputStream();
//从文件系统中的某个文件中获得输入字节
FileInputStream fileInput = new FileInputStream(path);
int size = -1;
byte[] buffer = new byte[1024];
while((size = fileInput.read(buffer, 0, 1024)) != -1){
outputData.write(buffer, 0, size);
}
outputData.close();
fileInput.close();
data.close();
return fileName + " 发送完成";
} catch (Exception e) {
return "发送错误:\n" + e.getMessage();
}
}
}
我们可以利用上述的文件传输类,来实现局域网中的文件传输
具体使用代码如下:
// 1、文件名 2、文件路径 3、目标ip 4、目标端口
String response = socketManager.SendFile(fileName, filePath,ip, POST);
Message.obtain(handler, 0, response).sendToTarget();
调用以上代码就可以实现局域网中的文件传输;
注意:以上文件传输属于网络传送,记得在子线程中执行哦,否则要报错!
Android网络编程只局域网传输文件的更多相关文章
- Java 学习笔记 网络编程 使用Socket传输文件 CS模式
Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...
- linux网络编程之断点传输文件
以下载链接"http://www.boa.org/boa-0.94.13.tar.gz"为例: 断点续传实验大概步骤: ===================== 1,使用geth ...
- Android网络编程基础
Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...
- 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder
请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
- Android网络编程要学的东西与Http协议学习
本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUr ...
- 1.Android网络编程-HTML介绍
1.HTML介绍 超文本标记语言(HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. 在Eclipse下则可以使用自带的浏览器浏览html: 2.H ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
随机推荐
- NGUI之UIRoot屏幕分辨率自适应
NGUI在Unity3D游戏开发中非常常用,而NGUI对于每一个UI场景,都是以一个UIRoot为UI游戏对象树的根的,那么这个UIRoot是起什么作用的呢? 先简单看一下UIRoot中的基本属性 U ...
- gulp-notify处理报错----gulp系列(二)
上一节,以less为例,入门了gulp,并为任务结构做了抽离. 前端们,gulp该用起来了,简单的demo入门——gulp系列(一) 本节学习下gulp-notify,官方这样解释的: gulp-no ...
- LeetCode-95. Unique Binary Search Trees II
Description: Given n, generate all structurally unique BST's (binary search trees) that store values ...
- Android 学习笔记 Service
PS:前几篇的内容光是上代码了,也没有细细的讲解..感觉这样写很不好..因此还是多一些讲解吧... 学习内容: 1.了解Service... 2.Service的启动与停止.. 3.绑定与取消绑定Se ...
- IE11之F12 Developer Tools--控制台工具(Console)
前面我们介绍了IE11的Developer Tools中的第一个工具--DOM Explorer,这篇文章介绍第二个工具--控制台(Console),使用控制台工具查看错误和其他信息.发送调试输出.检 ...
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示
一直以来,都希望整合一个以客户为中心的平台,有两个方面的考虑:一是实现客户数据.客户关系.客户管理等方面的整合,以便更好利用好客户的相关资源,发挥最大的营销效益:二是整合目前我的开发框架的所有模块和技 ...
- 20161119微信小程序初识
Tritonal ft. Angel Taylor - Getaway [Official Lyric Video]
- Visual Studio中附加调试器的方法
添加一个空的C++项目,项目属性配置如图. 命令里写要调试的程序的完整路径. 工作目录写所在目录的路径.
- js限制input输入
1.取消按钮按下时的虚线框,在input里添加属性值 hideFocus 或者 HideFocus=true <input type="submit" value=" ...
- Chrome浏览器的Timing分析
以W3C网站为例: Stalled是浏览器得到要发出这个请求的指令,到请求可以发出的等待时间,一般是代理协商.以及等待可复用的TCP连接释放的时间,不包括DNS查询.建立TCP连接等时间等. SSL( ...