Android P的Socket通信实现之传输图片数据
16lz
2021-01-23
Android的socket通信基本实现请参考:
https://blog.csdn.net/Sunxiaolin2016/article/details/90715331
在文章《Android P的Socket通信实现》中主要实现了一个socket通信,通过读写一个txt文本去传输一些数据信息。
本文主要记录传输一张图片信息。
一、创建客户端
protected void connectSocket() { Socket socket; try { // 创建一个Socket对象,并指定服务端的IP及端口号 socket = new Socket("127.0.0.1", 9821); DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream()); //发送的图片为demo.jpg,将bitmap转为字节数组 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.demo); ByteArrayOutputStream bout = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG,100,bout);//写入字节的长度,再写入图片的字节 long len = bout.size();//这里打印一下发送的长度 Log.i("sendImgMsg", "len: "+len); outputStream.writeLong(len); outputStream.write(bout.toByteArray());//发送成功 Log.i("ServerReceviedByTcp","outputStream.write ok" ); // 发送读取的数据到服务端 outputStream.flush(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
二、创建服务器端
public void createServerRecevied() { // 声明一个ServerSocket对象 ServerSocket serverSocket = null; try { // 创建一个ServerSocket对象,并让这个Socket在9821端口监听 serverSocket = new ServerSocket(9821); // 调用ServerSocket的accept()方法,接受客户端所发送的请求, // 如果客户端没有发送数据,那么该线程就停滞不继续 Socket socket = serverSocket.accept(); DataInputStream inputStream = new DataInputStream(socket.getInputStream()); //同样是先读长度 long len = inputStream.readLong(); System.out.println("len = " + len); byte[] bytes = new byte[(int) len]; //然后在读这个长度的字节到字节数组 inputStream.readFully(bytes); //将独到的内容保存为文件到本地 File file = new File("/data/local/tmp/" + len + ".png"); FileOutputStream fileOutputStream = new FileOutputStream(file); fileOutputStream.write(bytes); //接收成功 在/data/local/tmp/下面可以看到生成的png格式图片 Log.i("ServerReceviedByTcp","fileOutputStream.read ok" ); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } }
三、总结
需要修改/data/local/tmp/的权限,否则保存图片失败。
adb shell chmod 777 /data/local/tmp
更多相关文章
- ItemTouchHelper.Callback实现仿朋友圈发布图片拖拽排序
- android 手势屏幕平移图片转换效果(也可以平移文本)
- Android 如何更换屏幕上锁界面背景图片
- 管理图片缓存
- android 图片透明
- Android实现图片轮播
- Android图片左右切换和拖动大小
- Android支持的图片格式
- Android——插入图片【ImageView】属性详解