socket-android客户端接收服务器端发来的图片异常

问题描述

android客户端接收服务器端发来的图片异常

threadid=11: thread exiting with uncaught exception (group=0x40a13300)
FATAL EXCEPTION: Thread-78
java.lang.NegativeArraySizeException: -2555936
at me.demo.transimage.MainActivity$1$1.run(MainActivity.java:59)
客户端代码
public class MainActivity extends Activity
{

private ImageView imageView;
private Bitmap bitmap;
private Button button;
public void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

    imageView = (ImageView) findViewById(R.id.imageView1);
    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {
                new Thread()
                {
                            public void run()
                            {
                                            Socket socket = null;
                                            byte[] data = null;
                                            try {
                                                socket = new Socket("10.0.2.2",1346);
                                                DataInputStream dis = new DataInputStream(socket.getInputStream());  

                                                if( dis.available()>=0)
                                                {
                                                    data = new byte[dis.readInt()];
                                                    bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                                                    imageView.setImageBitmap(bitmap);
                                                }
                                            }
                                            catch (IOException e)
                                            {
                                                e.printStackTrace();
                                            }
                                            finally
                                            {
                                                try
                                                {
                                                    if(socket!=null)
                                                    socket.close();
                                                }
                                                catch (IOException e)
                                                {
                                                    e.printStackTrace();
                                                }
                                            }  

                            }                       

                }.start();
        }
    });
}

}

服务器端代码
public class TransImageServer
{

public static void main(String[] args)
{

try
{

ServerSocket server = new ServerSocket(1346);

System.out.println("服务器已启动,正在监听1346端口 ");

                Socket socket = server.accept();  

                DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
                FileInputStream fis = new FileInputStream("F:\project_test_image\avatar3_2.jpg");
                byte[] data = new byte[fis.available()];
                System.out.println("fis.available          " + (fis.available()));
                fis.read(data);
                dos.write(data);
                dos.flush();
                dos.close();
                fis.close();
                socket.close();
                server.close();  

    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}

}

服务器端 System.out.println("fis.available " + (fis.available()));
输出为 服务器已启动,正在监听1346端口
fis.available 1031
但是客户端却报出有异常,java.lang.NegativeArraySizeException: -2555936

解决方案


不知道你的问题解决了没有

时间: 2024-09-05 01:39:22

socket-android客户端接收服务器端发来的图片异常的相关文章

android服务器-android客户端的服务器端可以移植到手机本地吗

问题描述 android客户端的服务器端可以移植到手机本地吗 android客户端的服务器端可以移植到手机本地吗实现思路是什么呢,tomcat木有手机android版吧 解决方案 等着你去开发吧!你可以试试 解决方案二: tomcat没有Android端的

android客户端从服务器端获取json数据并解析的实现代码_Android

首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 代码如下: /**      * 从指定的URL中获取数组      * @param urlPath      * @return      * @throws Exception      */     public static String readParse(String urlPath) throws Exception {                  ByteArrayOutputSt

android客户端下载服务器端的图片,通过什么传输的??

问题描述 android客户端有个功能可以查看服务器的图片,客户端传过去一个图片路径,服务器端是通过什么方法传图片到客户端的啊?主要是request和response怎么封装图片? 解决方案 解决方案二:HTTP协议,就像下载一个图片一样.类似于这样的代码:URLurl=newURL("http://xxx.xxx.xxx.xxx/img/xxx.gif");URLConnectionconn=url.openConnection();InputStreamis=conn.getInp

环信3.0 Android客户端接收消息问题

问题描述 通过设置EMClient.getInstance().chatManager().addMessageListener(msgListener);EMMessageListener msgListener = new EMMessageListener() {        @Override        public void onMessageReceived(List<EMMessage> messages) {            // TODO Auto-generat

C/S程序中,客户端接收二进制内存流如何释放?急求...

问题描述 C/S程序中,我在客户端接收服务器端发来的MemoryStream数据.定义://获取网络流NetworkStreamnetworkStream=client.GetStream();//将网络流作为二进制读写对象br=newBinaryReader(networkStream);调用线程:privatevoidReceiveData(){stringreceiveString=null;while(isExit==false)//进入循环接收{try{receiveString=br

服务器-通过JSON格式获取到的html页面,怎么在Android客户端显示

问题描述 通过JSON格式获取到的html页面,怎么在Android客户端显示 服务器端直接将一个有图片有超链接的html封装成JSON中的一个字段的值,客户端获取后怎么去显示这个html呢?通过setText(Html.fromHtml(map.get(""content"")))明显是不可以的,因为还是有图片和链接的.JSON如下: 解决方案 http://blog.sina.com.cn/s/blog_75016706010149yy.html 解决方案二:

Android客户端post请求服务器端实例_Android

Android客户端请求服务器端的详细解释 1. Android客户端与服务器端通信方式: Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式. 2. 解析服务器端返回数据的解释: (1).对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三种格式. (2). JSON(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比

Android客户端post请求服务器端实例

Android客户端请求服务器端的详细解释 1. Android客户端与服务器端通信方式: Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式. 2. 解析服务器端返回数据的解释: (1).对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三种格式. (2). JSON(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比

线程-使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求

问题描述 使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求 初学java,目前写了一个服务端和一个客户端.大致了解了如何socket通信是如何操作的,并且初步实现了客户端和服务端的通信.也仅仅是是接受和返回简单的字符串.部分代码如下 public void run(){ try{ serverSocket=new ServerSocket(SERVER_PORT_ONE); System.out.println("serversocket已创建"