用socket传输照片的问题

问题描述

用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

用socket传输照片的问题的相关文章

文件传输-关于C# socket传输中的连接问题

问题描述 关于C# socket传输中的连接问题 由于我初次编写网络传输这一块的代码,中间一些传输上这几道连接的地方不太明白. 现在我遇到的情景是这样的: 1.我用TCP协议传输文件至服务器, 2.客户端第一次发送文件信息等待回应, 3.服务器接收到消息后返回状态, 4.本地收到状态后开始传文件并等待传输完成回应, 5.传输完成后服务器发送完成状态回来客户端接收到整个过程就完成了. 现有服务器一台,公网IP,可以直接从任何电脑访问的那种, 我现在在服务器上写好了监听,监听收到的消息并判断,然后发

ios-iOS 开发,socket 传输的都是data 类型,怎么知道这个data 的原始类型是图片还是

问题描述 iOS 开发,socket 传输的都是data 类型,怎么知道这个data 的原始类型是图片还是 iOS 开发,socket 传输的都是data 类型,怎么知道这个data 的原始类型是图片还是字符串类型.数据传输用的GCDAsynSocket 解决方案 只有解析了之后才能知道是什么类型,按照规定的格式的话,就不需要这个判断,传输和监听的都规定好了传送的格式. 解决方案二: 你可以查阅下某种图片的格式定义, 例如jpg, 其原始数据中, 有类型标识 解决方案三: Data类型的Url

xml-通过java socket传输XML

问题描述 通过java socket传输XML 请问,在不同电脑间传输XML,如果A电脑接收了B电脑发送的XML,用dom4j解析XML得到有用数据后再如何动态生成XML,然后发送给C电脑? 好比B电脑要发送的XML只有几个空需要从A电脑的XML中读取数据填入,再发送给C电脑,这里数据自动补充填入采取什么方法? 刚学习这块没多久,希望好心人能够帮忙指点一下,理清思路,谢谢 解决方案 首先,xml数据格式是通信双方约定好的,虽然数据是xml格式,但是本质从Socket流中读取后得到的是字符串,那么

安卓开发-一个悲催的菜鸟,关于安卓socket传输手机蓝牙地址的问题。。。

问题描述 一个悲催的菜鸟,关于安卓socket传输手机蓝牙地址的问题... 最近做一个项目,是关于用安卓编程获取手机的蓝牙地址,并且把获取的蓝牙地址通过socket传输到服务器端,真的很急,希望大神能够帮忙解决,一个悲催的工科妹子在此谢过了... client: package Socketprocess; import java.net.*; import java.io.*; public class Client{ public void getadd() { } public stati

socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空

问题描述 socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空 结构体定义: typedef struct PriceChangeVar { int varNum; //产品编号 float varPrice; //监控价格 int changeMark; //监控标志 }PriceCV; //客户信息结构体 typedef struct CilentInformation { PriceCV MemPriceCV[10]; //价格需求定制结构体 SYSTEMTIM

java中假设有JTextArea()经过socket传输

问题描述 java中假设有JTextArea()经过socket传输 java中假设有JTextArea()经过socket传输如何区分输出文本是从哪个JTextArea传出来的,要加个监听吗 解决方案 具体想要实现的功能是什么? 整个Jtextarea都经过序列化传输了吗? 输出的文本是什么? 解决方案二: Java socket传输

套接字编程-socket传输文件时遇到的问题!

问题描述 socket传输文件时遇到的问题! 先给出代码. 客户端: SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(4444); HANDLE fp =CreateFi

socket传输 间接性出现“由于目标机器积极拒绝,无法连接” 十万火急求高手指点

问题描述 服务端与客户端都在自己电脑上测试可以但放到局域网上就会出现问题.经常传着传着就报"由于目标机器积极拒绝,无法连接",传是可以传啊,有时候就全部文件都传过去了.有时候就只传了一部分这是我的客户端代码//循环遍历获取文件夹下所有文件发送服务端privatevoidfindFiles(FileSystemInfoinfo){DirectoryInfodir=infoasDirectoryInfo;FileSystemInfo[]files=dir.GetFileSystemInfo

Java使用Socket传输文件遇到的问题(转)

  1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下:                                              接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决了问题.                                                    个人认为可能是传输过程中,接收端向磁盘写速度有点慢,被后面的覆盖导致错误. //-------