android开发,socket发送文件,read阻塞,得不到文件尾-1

这是我的接收文件代码:开始可以读取到-1,但是现在又读取不到了,所以才加上红色字解决的(注释的代码)

                    File file = new File(mfilePath,"chetou."+entity.mediaType);
                    if(!file.exists())
                        file.createNewFile();
                    FileOutputStream fos =new FileOutputStream(file);  //将接收的文件保存到对应的路径
                    byte[] sendBytes =new byte[1024];
                    int transLen =0;
                    Log.v(TAG, "----开始接收文件<" + entity.params +">,文件大小为<" + fileLength +">----");
                    while(true){
                        int read =0;
                        read = dis.read(sendBytes);
                        Log.v(TAG, "read="+read);
                        if(read == -1)
                            break;
                        transLen += read;
                        Log.v(TAG, "接收文件进度" +100 * transLen/fileLength +"%...");
                        fos.write(sendBytes,0, read);
                        fos.flush();
                        /*if(transLen==fileLength)
                            break;*/
                    }
                    Log.v(TAG, "----接收文件<" + entity.params +">成功-------1");
                    entity.filePath = mfilePath+"/chetou."+entity.mediaType; //将下载下来的文件名字赋值给entity.filePath
                    Log.v(TAG, "----接收文件<" + entity.params +">成功-------2");

发送文件的代码:

//传输文件
            FileInputStream fis =new FileInputStream(file);
            byte[] sendBytes =new byte[1024];
            int length =0;
            while((length = fis.read(sendBytes,0, sendBytes.length)) >0){
                dos.write(sendBytes,0, length);
                dos.flush();
            }
            fis.close();
            Log.v(TAG, "发送完文件数据");
时间: 2024-10-01 20:01:18

android开发,socket发送文件,read阻塞,得不到文件尾-1的相关文章

android 开发 socket发送会有部分乱码,串码,伴随着数据接收不完整

场景: 客户端A.B,A向B发送json字符串后紧接着发送文件,B接收到文件后才返回消息. 环境:android.使用的是原始的write 和read (若使用的是writeUTF不会出现此问题.)需要个IOS对接 原因:采用连续write方法写数据会出现一起read的情况,数据缓存串乱 解决办法:必须write一次之后read一次,这样才能保证A在read的时候不会在第一次read的时候就读取B第二次write的内容.

android开发 socket接收图片并保存

逻辑:接收到socket之后需要将socket发送的图片数据保存下来并通知handler更新界面 关键代码: public void readImage(Socket socket) { try { InputStream in = socket.getInputStream(); BufferedInputStream bis = new BufferedInputStream(in); Bitmap bitmap = BitmapFactory.decodeStream(bis);//这个好

Android开发进阶(五)--使用原始的XML文件

应用场景 在Android应用开发过程中,有时候我们自己有一些XML文件是我们自己手动创建的,而在项目开发过程中可能会用到,也就是说这用到了原始的XML资源文件.这个XML原始资源文件我们可以通过Resouce类的以下两个方法来获得: getResouce.getXml(int id); getRawResouce(int id) 这两个方法返回的对象是一个XmlResouceParser类的对象.而XmlResouceParser类是XmlPullParser类的子类,所以我们可以Androi

Android开发socket通信——手机做server端C/S架构实现

每一部智能手机都是一部微型电脑,在学校里最喜欢的就是找上十个八个同学一起局域网内开几局dota,突然想到,拿手机C一个游戏来玩怎样,不用连wifi.不用开数据,几部手机选一个做主机,其他手机连上它的热点,便可以互动起来游戏搞起来了,多开心~~ 实际实现过程中发现拿手机本身做server的手段还真是很少有人使用,网上也很少有现成的解决方案,经过一番摸索,简单实现了手机自身做server(可兼做客户端)的socket通信功能,写出来请大家指导一下,也是简单梳理一下方便日后复用. 遇到的最大问题可能是

android 利用socket 发送Json数据demo

客户端代码: package com.yqq.jsonclienttest; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import org.json.JSONException; import org.json.JSONObject; impo

Android开发心得-使用File ExPlorer无法访问系统内部文件

问题:本机在获得ROOT权限后,使用Eclipse自带的File Explorer访问/data/data下各APP的存储文件,均无法打开.更换另外一个设备后,情况正常.Sumsung的有些机型在获得ROOT权限系统后,仍然不能读写系统文件,这个时候就需要我们使用adb为文件夹赋予权限了 解决办法:在配置好adb后,cmd进入命令行,按序号依次输入如下命令 1. adb shell 2. su      (在PC输完此命令后,正常情况下Android设备会提示是否为ADB授权,选择授权即可) 3

Android 开发中eclipse 下 DDMS 视图中 sdcard 中文件导入的处理

首先需要说明下,这里说的sdcard的权限并不是指在Android application程序中设置sdcard的权限读 取问题.而是指在DDMS看到的目录下的那个sdcard目录的权限问题.       有时候,当你想在sdcard目录下面导入某个文件时,突然发现sdcard目录没有权限,它的权限状态为( d-------即000).这时候我们需要做的事:1.如果你没有配置好adb运行环境,在环境配置的path下面将 android-sdk-windows\platform-tools路劲添加

Android开发之发送短信

本实例通过SmsManager的sendTextMessage方法实现发送短信关于SmsManager的详解大家可以参照:Android开发之SmsManager详解 实例运行效果图: 实例分析: 上面的程序用到了一个PendingIntent对象,PendingIntent是对Intent的包装,表示即将发生的意图,主要用在:通知Notificatio的发送,短消息SmsManager的发送和警报器AlarmManager的执行等等.一般通过调用PendingIntent的 getActivi

Android开发网上的一些重要知识点[经验分享]

1. android单实例运行方法 我们都知道Android平台没有任务管理器,而内部App维护者一个Activity history stack来实现窗口显示和销毁,对于常规从快捷方式运行来看都是startActivity可能会使用FLAG_ACTIVITY_NEW_TASK标记来打开一个新窗口,比如Launcher,所以考虑单任务的实现方法比较简单,首先Android123纠正下大家一种错误的方法就是直接在androidmanifest.xml的application节点中加入android

学会这些Android开发热门前沿知识,2020年你就不用愁了!

前言 Android确实不是当年盛况,已经不再像前几年前那么火爆.一个新行业如果经历过盛极一时,那么必然有这样的一条曲线,像我们学的正弦曲线先急速上升,然后到达顶点,然后再下降,最后再趋近一个平稳的值.那么这一两年就已经是在一个饱和值之间浮动,因此在这样的形式下,可能对于个人开发者相应的要求就要高一些.以前是只要你会Android四大组件的都是个香饽饽,那样的时代已经过去了,随着人机交互的体验要求,App的用户体验的要求.流畅度等等,已经不可同日而语.在这样的大环境下,那么对我们的Android