[转载]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();
- }
- }
- });
- }