问题描述
- 用socket传输照片的问题
- socket传图像 客户端接收到的图片长度为负数 大家帮忙看看 是为什么啊
这是发送端
public class SendPicture {public static final String END_SYMBOL = ""rn""; MyThread creatServer1 = new MyThread(); static File file = new File(getDir()1.png"");public static void sendpicture(){ Bitmap bitmap =null; try{FileInputStream fileStream = new FileInputStream(file); bitmap = BitmapFactory.decodeStream(fileStream); Bitmap thumBitmap = ThumbnailUtils.extractThumbnail(bitmap 1024 1024); //ImageUtil.saveJpeg(thumBitmap); //发送给客户端 DataOutputStream dos = new DataOutputStream(MyThread.mSocketServer.getOutputStream()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); thumBitmap.compress(Bitmap.CompressFormat.JPEG 85 baos); //Log.i(tagbaos.size() "" + baos.size()); dos.writeInt(baos.size()); byte[] bytes = baos.toByteArray(); dos.write(bytes); //dos.writeUTF(name);//写进去名字 dos.flush(); } catch (IOException e) { e.printStackTrace(); }} 这是接收端
public static void receivemessage() {
mThreadClient1=new Thread(new Runnable() { @Override public void run() { try { DataInputStream is = new DataInputStream(MyThread.mSocketClient.getInputStream()); int size = is.readInt(); //得到byte的长度 byte[] buffer = new byte[size]; int len = 0; while(len < size){ len += is.read(buffer len size-len); } Bitmap bitmap = BitmapFactory.decodeByteArray(buffer 0 buffer.length); if(bitmap == null){ // Log.i(tag服务器:bitmap为空""); } // String name = is.readUTF(); // ImageUtil.saveJpeg(bitmap name); String fileName = System.currentTimeMillis() + "".jpg""; File pictureFile = new File(getDir()fileName); FileOutputStream fos = new FileOutputStream(pictureFile); bitmap.compress(Bitmap.CompressFormat.PNG1 fos); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); mThreadClient1.start();
}
这是logcat
解决方案
看下对方计算机是不是大端序的,将整数颠倒了,或者你整个解析的不是表示长度的数据
时间: 2024-07-31 16:30:34