各位大虾:
本人利用SurfaceView和Camera做了一个拍照并上传图片的程序,上传利用的是java.net中的socket机制,现发现上传到服务器的图片大小是正确的,但就是图片打不开,好像不是有效的JPEG格式,不过在模拟器中上传后是正确的。公司催得急,请各位大虾不吝赐教~~~~~~~~~~~~
若能解决问题,当另开贴继续送分~~~~~~

解决方案 »

  1.   

    setSendBufferSize(int size)
    默认大小好象是有8M,
    设置小点数据不容易丢失
      

  2.   

    下面贴出Android发送时的代码:
             Socket s = null;
             try{
             Log.v("socket", "connecting");
             s = new Socket("120.195.64.171",21);
             Log.v("socket", "connected");
             DataOutputStream dos = new DataOutputStream(s.getOutputStream());
             DataInputStream dis = new DataInputStream(s.getInputStream());
             dos.writeInt(imageData.length);   //发送文件大小
             dos.flush();
             dis.readUTF();           //在取得响应信息后再发送图片,防止输出流信息混乱
             dos.write(imageData);    //发送图片
             dos.flush();
             Log.v("socket", "wrote:" + imageData.length);
             ......
    请千万指点!!
      

  3.   

    服务器获得数据和Android上的数据只有在头和尾各有一小段不一致,中间的数据一致,整个大小也一致。不一致的地方全部被清一色的 0A(十六进制)代替的,救命啊!
      

  4.   

    这位大哥,我刚才用s.setSendBufferSize(10)试过好像没用,现在的问题不是丢字节,总数是一样的,字节不一样, 不知道是什么原因呢?
      

  5.   

    问题已经解决,原来是在socket通信时用了21端口的缘故,通过联通的WCDMA网络走21端口,传输的数据会被改掉,改成其他端口就可以了!希望对大家有所帮助!
      

  6.   

    问题很简单,就是上传后的文件错误了,根本原因就是文件读写发生了错误.
    读写文件流的时候,使用的byte数组的指定大小不是文件的实际大小的整数倍的时候发生了错误。
    不信你可以将byte数组长度指定成1试一试我说的对不对。
    都说到这个分上了还不明白具体解决方法?这种问题对于n多程序员都很模糊
      

  7.   

    为什么联通的用21端口被修改了呢?楼主这个也share 一下拜
      

  8.   

    哥们,你好,我们做一个项目要用到类似的地方,能给一下源码吗,万分感谢,我QQ309544681,我用QQ邮箱,谢谢