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

android socket发送图片

2016-01-07 16:39 471 查看
传送图片,开始信息不全,修改后总算正确传输。

java 写的服务器,把读取的图片保存到本地。

public class AndroidRunable implements Runnable {
Socket socket = null;

public AndroidRunable(Socket st) {
this.socket = st;
}

public void run() {

String line = null;
InputStream input;//读取客户端信息
OutputStream output;//向客户端发送数据
String str = "hello android";

try {
input = socket.getInputStream();
BufferedReader bff = new BufferedReader(
new InputStreamReader(input));
// 获取客户端的信息
String img = "";
while ((line = bff.readLine()) != null) {
img += line;
}
String[] imgs = img.split("采集图片");
for (int i = 0; i < imgs.length; i++) {
System.out.println("img>>>" + imgs[i]);
Decoder d = Base64.getDecoder();
byte2image(d.decode(imgs[i]), "kk" + i);
}
bff.close();
input.close();
socket.close();

} catch (IOException e) {
e.printStackTrace();
}
}
// byte数组到图片
public void byte2image(byte[] data, String path) {
if (data.length < 3 || path.equals(""))
return;
try {
FileOutputStream imageOutput = new FileOutputStream(new File(
"C:\\Users\\Administrator\\Desktop\\socket\\" + path
+ ".png"));
imageOutput.write(data, 0, data.length);
imageOutput.close();
System.out.println("Make Picture success,Please find image in "
+ path);
} catch (Exception ex) {
System.out.println("Exception: " + ex);
ex.printStackTrace();
}
}
}服务器循环判断是不是客户端要建立连接。
public class AndroidService {
public static void main(String[] args) {
Socket st = null;
try {
ServerSocket socket = new ServerSocket(2584);
while (true) {
st = socket.accept();
new Thread(new AndroidRunable(st)).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
st.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

}
}

android 客户端,我读取的 drawable里的图片
Resources res = getResources();
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.test1);
String strbm = Base64.encodeToString(BitmapToBytes(bmp), Base64.DEFAULT);
Bitmap bmp1 = BitmapFactory.decodeResource(res, R.drawable.test2);
String strbm2 = Base64.encodeToString(BitmapToBytes(bmp1), Base64.DEFAULT);
Bitmap bt = Bytes2Bimap(Base64.decode(strbm,Base64.DEFAULT));
System.out.println(strbm + "bt" + bt);
ImageView iv= (ImageView) findViewById(R.id.img_socket);
iv.setImageBitmap(bt);
new SocketThread("采集图片"+strbm+"采集图片"+strbm2, MainActivity.this, socket).start();

bitmap转换为byte的方法
public byte[] BitmapToBytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
try {
socket = new Socket();
//socket.connect(new InetSocketAddress("192.168.1.108", 2584), 5000);
socket.connect(new InetSocketAddress("192.168.1.105", 2584), 5000);
//获取输入输出流
OutputStream ou = socket.getOutputStream();
//BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//读取发来服务器信息
buffer = "";
//向服务器发送信息
ou.write((sendMes).getBytes("UTF-8"));
ou.flush();
bundle.putString("msg", buffer.toString());
msg.setData(bundle);
//发送信息,修改ui线程中的组件
myHandler.sendMessage(msg);
// bff.close();
ou.close();
socket.close();
} catch (SocketTimeoutException aa) {
//连接超时
bundle.putString("msg", "服务器连接失败!请检查网络是否打开");
msg.setData(bundle);
myHandler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android socket 图片