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



为研究android客户端和java服务端之间用socket来传输图片的问题,困扰我很久,网上的参考内容不是完整,就是不详细,所以鉴于自己的痛苦,测试成功后,我决定把代码共享,希望遇到这个问题的同胞,不再痛苦。

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

服务端的代码:

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();
				}
			}			
		});
        
    }  



  • 17
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 59
    评论
评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值