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

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

jsc10年前 (2016-04-05)Android3751

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

服务端的代码:

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://www.jsc0.com/post/65.html

分享给朋友:

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

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

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

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

Android ImageView的scaleType属性与adjustViewBounds属性

Android ImageView的scaleType属性与adjustViewBounds属性

ImageView的scaleType的属性有好几种,分别是matrix(默认)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY android:sca...

修改keystore密码别名等

修改keystore密码别名等

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

Android 更换皮肤思路及解决方案

Android 更换皮肤思路及解决方案

本篇博客要给大家分享的一个关于Android应用换肤的Demo,大家可以到我的github去下载demo,以后博文涉及到的代码均会上传到github中统一管理。 github地址:https://github.com/devilWwj/Android-skin-upda...

采用SharedPreferences保存用户偏好设置参数和读取设置参数

采用SharedPreferences保存用户偏好设置参数和读取设置参数

Android SDK支持那些文件存储技术? 1. 使用SharedPreferences保存key-value类型的数据 2. 流文件存储(使用openFileOutput和openFileInput方法,或FileInputStream和FileO...

制作一款Android APK管理器主要代码

Android APK管理器代码,主要就是两个列表,一个显示SD卡上面的APK文件的list,一个显示已经安装的app的list。1:获取SD卡上的APK安装文件后,要用代码读出APK里面的信息,如icon等,的主要代码如下:private void getUninatllApk...