/** * 思想: 1.直接将所有数据安装字节数组发送 2.对象序列化方式 *//** * thread方式 * * @author Administrator */public class TestSocketActivity4 extends Activity { private static final int FINISH = 0; private Button send = null; private TextView info = null; private Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case FINISH: String result = msg.obj.toString(); // 取出数据 if ("true".equals(result)) { TestSocketActivity4.this.info.setText("操作成功!"); } else { TestSocketActivity4.this.info.setText("操作失败!"); } break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_test_sokect_activity4); // StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() // .detectDiskReads().detectDiskWrites().detectNetwork() // .penaltyLog().build()); // StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() // .detectLeakedSqlLiteObjects().detectLeakedClosableObjects() // .penaltyLog().penaltyDeath().build()); this.send = (Button) super.findViewById(R.id.send); this.info = (TextView) super.findViewById(R.id.info); this.send.setOnClickListener(new SendOnClickListener()); } private class SendOnClickListener implements OnClickListener { @Override public void onClick(View v) { try { new Thread(new Runnable() { @Override public void run() { try { //1: Socket client = new Socket("192.168.1.165", 9898); //2: ObjectOutputStream oos = new ObjectOutputStream( client.getOutputStream()); //3: UploadFile myFile = SendOnClickListener.this .getUploadFile(); //4: oos.writeObject(myFile);// 写文件对象 // oos.writeObject(null);// 避免EOFException oos.close(); BufferedReader buf = new BufferedReader( new InputStreamReader(client .getInputStream())); // 读取返回的数据 String str = buf.readLine(); // 读取数据 Message msg = TestSocketActivity4.this.myHandler .obtainMessage(FINISH, str); TestSocketActivity4.this.myHandler.sendMessage(msg); buf.close(); client.close(); } catch (Exception e) { Log.i("UploadFile", e.getMessage()); } } }).start(); } catch (Exception e) { e.printStackTrace(); } } private UploadFile getUploadFile() throws Exception { // 包装了传送数据 UploadFile myFile = new UploadFile(); myFile.setTitle("tangcco安卓之Socket的通信"); // 设置标题 myFile.setMimeType("image/png"); // 图片的类型 File file = new File(Environment.getExternalStorageDirectory() .toString() + File.separator + "Pictures" + File.separator + "b.png"); InputStream input = null; try { input = new FileInputStream(file); // 从文件中读取 ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte data[] = new byte[1024]; int len = 0; while ((len = input.read(data)) != -1) { bos.write(data, 0, len); } myFile.setContentData(bos.toByteArray()); myFile.setContentLength(file.length()); myFile.setExt("png"); } catch (Exception e) { throw e; } finally { input.close(); } return myFile; } }}public class UploadFile implements Serializable {private String title;private byte[] contentData;private String mimeType;private long contentLength;private String ext;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public byte[] getContentData() {return contentData;}public void setContentData(byte[] contentData) {this.contentData = contentData;}public String getMimeType() {return mimeType;}public void setMimeType(String mimeType) {this.mimeType = mimeType;}public long getContentLength() {return contentLength;}public void setContentLength(long contentLength) {this.contentLength = contentLength;}public String getExt() {return ext;}public void setExt(String ext) {this.ext = ext;}}下边是服务端

public class Main4 {public static void main(String[] args) throws Exception {ServerSocket server = new ServerSocket(9898); // 服务器端端口System.out.println("服务启动........................");boolean flag = true; // 定义标记,可以一直死循环while (flag) { // 通过标记判断循环new Thread(new ServerThreadUtil(server.accept())).start(); // 启动线程}server.close(); // 关闭服务器}}public class ServerThreadUtil implements Runnable {private static final String DIRPATH = "D:" + File.separator + "myfile"+ File.separator; // 目录路径private Socket client = null;private UploadFile upload = null;public ServerThreadUtil(Socket client) {this.client = client;System.out.println("新的客户端连接...");}@Overridepublic void run() {try {ObjectInputStream ois = new ObjectInputStream(client.getInputStream()); // 反序列化this.upload = (UploadFile) ois.readObject(); // 读取对象//UploadFile需要和客户端传递过来的包名类名相同,如果不同则会报异常System.out.println("文件标题:" + this.upload.getTitle());System.out.println("文件类型:" + this.upload.getMimeType());System.out.println("文件大小:" + this.upload.getContentLength());PrintStream out = new PrintStream(this.client.getOutputStream());// BufferedWriterout.print(this.saveFile());//返回响应//BufferedWriter writer = null;//writer.write("");} catch (Exception e) {e.printStackTrace();} finally {try {this.client.close();} catch (IOException e) {e.printStackTrace();}}}private boolean saveFile() throws Exception { // 负责文件内容的保存/** * java.util.UUID.randomUUID(): * UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法。 UUID(Universally * Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的, * 是由一个十六位的数字组成 * ,表现出来的形式。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后, * 过几秒又生成一个UUID, * 则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得 * ),UUID的唯一缺陷在于生成的结果串会比较长,字符串长度为36。 * * UUID.randomUUID().toString()是java JDK提供的一个自动生成主键的方法。 UUID(Universally * Unique Identifier)全局唯一标识符, 是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的, * 是由一个十六位的数字组成,表现出来的形式 */File file = new File(DIRPATH + UUID.randomUUID() + "."+ this.upload.getExt());if (!file.getParentFile().exists()) {file.getParentFile().mkdir();}OutputStream output = null;try {output = new FileOutputStream(file);output.write(this.upload.getContentData());return true;} catch (Exception e) {throw e;} finally {output.close();}}}public class UploadFile implements Serializable {private String title;private byte[] contentData;private String mimeType;private long contentLength;private String ext;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public byte[] getContentData() {return contentData;}public void setContentData(byte[] contentData) {this.contentData = contentData;}public String getMimeType() {return mimeType;}public void setMimeType(String mimeType) {this.mimeType = mimeType;}public long getContentLength() {return contentLength;}public void setContentLength(long contentLength) {this.contentLength = contentLength;}public String getExt() {return ext;}public void setExt(String ext) {this.ext = ext;}}

取消

评论

android java服务端_Android/Java从服务器端下载图片相关推荐

  1. java 服务端重复提交_java 服务器端验证重复提交

    1.insertData.jsp: < import="org.apache.struts.util.TokenProcessor"%> insertData.jsp ...

  2. 网页连接不上java服务端,用Java插入IP时无法连接到服务器

    好的,我正在尝试学习Java客户端/服务器方面的知识,并且正在按照以下教程代码进行操作.当我将" localhost"更改为我的IP时,它将停止工作.请帮忙. 编辑:" ...

  3. Android端+Java服务端+servlet+MySQL二手商城设计

    项目地址: Android端+Java服务端+servlet+MySQL二手商城设计.zip-Android文档类资源-CSDN下载 项目简介及内容截图如下: 本系统适用于计算机专业作为期末课程设计. ...

  4. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

    基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...

  5. android+okhttp+java服务端(tomcat)+mysql实现登录注册

    先上代码(文章结尾有遇到的问题和对应解决方案) android客户端 >android:app-build.gradle 1.添加okhttp依赖,具体根据自己的okhttp包来决定 depen ...

  6. java服务端是什么,持续更新~

    Java反射机制是什么?Java反射机制是Java语言的一个重要特性.在学习Java反射机制前,大家应该先了解两个概念,编译期和运行期.编译期是指把源码交给编译器 Java反射机制在服务器程序和中间件 ...

  7. Flex通信-Java服务端通信实例

    Flex与Java通信的方式有很多种,比较常用的有以下方式: WebService:一种跨语言的在线服务,只要用特定语言写好并部署到服务器,其它语言就可以调用 HttpService:通过http请求 ...

  8. java服务端集成极光消息推送--详细开发步骤

    1.极光推送账号准备 要使用极光消息推送必须先在官方网站上注册账号,并添加应用. 产品介绍:https://docs.jiguang.cn/jpush/guideline/intro/ 注册开发者账号 ...

  9. 五子棋服务端程序java_9网上五子棋对战(java)服务端源码

    9网上五子棋对战(java)服务端源码 网上五子棋对战(java)服务端源码 /* 五子棋游戏是本人在学习java swing时写的一个程序,程序分两部分:服务器端和客户端.运行程序时先运行服务器端, ...

最新文章

  1. python官网怎么下载安装-Python怎么下载安装
  2. python最小二乘法拟合_Python 普通最小二乘法(OLS)进行多项式拟合
  3. Open Flash Chart 初体验
  4. 如何将多个文件捆绑成一个可执行文件
  5. cookie/storage
  6. Vue中子组件向父组件请求数据时的数据格式问题
  7. 【leetcode】sort list(python)
  8. 什么是 DevSecOps?系列(一)
  9. 如何在Excel里输入能打钩的选择框?
  10. 新消费下的国货崛起新模式!
  11. 一、系统间的通信技术
  12. Redis基础——数据类型详解
  13. matplotlib使用cmap
  14. SQL Server 数据库实验课第九周——第六章总结
  15. 视频编解码 — H264结构
  16. postman接口工具-Invalid URI http:///%7B%7Burl%7D%7Dapi/document/getHelpDocumentUrl?appType=1
  17. Win7、Win10系统封装后GHO文件太大?是因为虚拟内存没关、休眠文件没删!
  18. PyQt5——显示图片
  19. 微信玩转开发板-微信控制智能家居简易模型
  20. Pyqt5+python2.7 美观的登陆界面制作(二)

热门文章

  1. typora高级设置字体_Mint(Linux)系统设置优化及其常用软件安装笔记
  2. IPC\DVS\DVR与NVR之间的区别
  3. 启明云端分享|SSD20X 如何使用SD卡根文件系统
  4. 计算机在供电设备中的应用,浅析计算机技术在供电系统中的应用与指导.pdf
  5. DFN封装系列ESD静电保护器件
  6. 华三交换机配置多个镜像口_配置本地端口镜像详解(多个镜像口:多个观察口)...
  7. c语言中穷竭算法,hihocoder#1054 : 滑动解锁(深度优先搜索)
  8. 使用sys导出oracle,oracle 让sys用户执行exp导出操作
  9. Java泛型之泛型参数
  10. C# 十六进制字符串与数值类型之间转换