当前位置:首页 > Android > 正文内容

android客户端和java服务端之间用socket来传输图片

jsc9年前 (2016-04-05)Android3418

一、从服务端向客户端发送图片:

服务端的代码:

import java.io.DataOutputStream;  
import java.io.FileInputStream;  
import java.io.IOException;    
import java.net.ServerSocket;  
import java.net.Socket;  

public class Server01 {  
    public static void main(String[] args) {  
        try {  
            ServerSocket server = new ServerSocket(30000);  
            Socket socket = server.accept();  
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());  
            FileInputStream fis = new FileInputStream("C:/sunnyTest/picture/cat01.jpg");  
            int size = fis.available();
            
            System.out.println("size = "+size);
            byte[] data = new byte[size];  
            fis.read(data);  
            dos.writeInt(size);  
            dos.write(data);  
            
            dos.flush();  
            dos.close();  
            fis.close();  
            socket.close();  
            server.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

客户端的代码:

import com.login.R;
import android.app.Activity;  
import android.content.Intent;
import android.graphics.Bitmap;  
import android.graphics.Bitmap.CompressFormat;  
import android.graphics.BitmapFactory;  
import android.os.Bundle;  
import android.os.Handler;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.ImageView; 

public class TestActivity extends Activity {  
      
    private ImageView imageView = null;  
    private Bitmap bmp = null;
    
    private ImageView imageView02;
    private Bitmap bmp02;
    private Button button02;
    private String uploadFile="/mnt/sdcard/qt.png";  
    
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.image);  
  
        imageView = (ImageView) findViewById(R.id.image01);  
        Button btn = (Button) findViewById(R.id.Button01);  
        btn.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {  
                
                Socket socket = null;  
                try {  
                    socket = new Socket("192.168.1.203", 30000);  
                    DataInputStream dataInput = new DataInputStream(socket.getInputStream());  
                    int size = dataInput.readInt();  
                    byte[] data = new byte[size];  
                    int len = 0;  
                    while (len < size) {  
                        len += dataInput.read(data, len, size - len);  
                    }  
                    ByteArrayOutputStream outPut = new ByteArrayOutputStream();  
                    bmp = BitmapFactory.decodeByteArray(data, 0, data.length);  
                    bmp.compress(CompressFormat.PNG, 100, outPut);  
                    imageView.setImageBitmap(bmp);  
                   
                    //Bitmap bitmap = BitmapFactory.decodeStream(dataInput);
                    //myHandler.obtainMessage().sendToTarget();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                } 
                finally {  
                    try {  
                        socket.close();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                }  
                    }  
        });
 }  
 }

二、客户端向服务端发送图片的代码:

服务端:

import java.io.DataInputStream;
import java.io.DataOutputStream;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.net.InetSocketAddress;  
import java.net.ServerSocket;  
import java.net.Socket;  

public class Server02 {  
    public static void main(String[] args) {  
        try {  
            ServerSocket server = new ServerSocket(40000);  
            Socket socket = server.accept();  
            DataInputStream dos = new DataInputStream(socket.getInputStream());  
            int len = dos.available(); 
            System.out.println("len = "+len);
            byte[] data = new byte[len];  
            dos.read(data);
            
            System.out.println("data = "+data);
            dos.close();  
            socket.close();  
            server.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

客户端:

 imageView02 = (ImageView)findViewById(R.id.image02);
        button02 = (Button)findViewById(R.id.Button02);
        button02.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0) {
                Socket socket;
                try {
                    socket = new Socket("192.168.1.203",40000);
                    DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 
                    
                    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.qt);
                    imageView02.setImageBitmap(bitmap);
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    //读取图片到ByteArrayOutputStream                    
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
                    byte[] bytes = baos.toByteArray();
                    out.write(bytes);
                    
                    System.out.println("bytes--->"+bytes);
                    out.close();
                    socket.close();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }            
        });
        
    }

转自:http://blog.csdn.net/qingzi635533/article/details/8961180

扫描二维码推送至手机访问。

版权声明:本文由微小站发布,如需转载请注明出处。

本文链接:https://jsc0.com/post/65.html

分享给朋友:

“android客户端和java服务端之间用socket来传输图片 ” 的相关文章

Android--SQLite(增,删,改,查)操作

            需要5个类:1.实体类:Person.java 2.抽象类:SQLOperate.java(封装了对数据库的操作) 3.助手类:DBOpenHelper.j...

Android权限问题整理

Android权限系统非常庞大,我们在Android系统中做任何操作都需要首先获取Android系统权限,本文记录了所有的Android权限问题,整理一下分享给大家。访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES读取或写入登记check-in数...

创建Popwindow弹出菜单的两种方式

创建Popwindow弹出菜单的两种方式

方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.v...

修改keystore密码别名等

修改keystore密码别名等

之前在测试Eclipse ADT的Custom debug keystore自定义调试证书的时候,发过一篇关于调试证书规格的博文:Eclipse ADT的Custom debug keystore所需证书规格,提到过自定义调试证书的密码和alias命名以及alias密码都是...

Android中的消息通知(NotificationManager和Notification)

下面来谈谈notification,这个notification一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提 示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这个快讯。已添加的Notification.Builder,使其更容易构建通知。 notifica...

GridView中item高度自适应

item高度自适应public class MyAdapter extends BaseAdapter {         GridView mGv;&n...