您的位置:首页 > 移动开发 > Android开发

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

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

一、从服务端向客户端发送图片:服务端的代码:
[java] view plaincopy
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();

}

}

}

客户端的代码:

[java] view plaincopy
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();

}

}

}

});

}

}

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

服务端:
[java] view plaincopy
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();

}

}

}

客户端:

[java] view plaincopy
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();

}

}

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐