电脑作为服务器,安卓手机作为客户端,通过Socket传输图片
来源:互联网 发布:免费时时彩网站源码 编辑:程序博客网 时间:2024/05/21 17:27
服务器端:
服务器使用java写的,由于开发用的android studio,所以新建一个android项目,但是选择 add no activity,进去后,new-javaclass.
package com.example.picturesocket;/** * Created by ASUS on 2017/8/27. */ 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(40000); Socket socket = server.accept(); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); FileInputStream fis = new FileInputStream("G:\\picture\\ceshi.jpg"); int size = fis.available();//这个只是计算图片的尺寸 System.out.println("size = "+size); byte[] data = new byte[size]; int len = 0; while((len=fis.read(data))!=-1) { dos.write(data,0,len); } //fis.read(data); //dos.writeInt(size); //dos.write(data);//这是什么意思 dos.flush(); dos.close(); fis.close(); socket.close(); server.close(); } catch (IOException e) { e.printStackTrace(); } } }客户端:(安卓app)(不要忘记声明中,使用网络权限)
(在主函数里,被注释掉的,都是我在网上查找的,但是实现起来不是那么容易。)
1.布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取图片" /><ImageView android:id="@+id/image01" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>2.主函数
package com.example.tupian;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.ImageFormat;import android.graphics.Rect;import android.graphics.YuvImage;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.IOException;import java.io.OutputStream;import java.net.Socket;public class MainActivity extends AppCompatActivity { private ImageView imageView = null; private Bitmap bmp = null;private Bitmap bmp1; private ImageView imageView02; // private Bitmap bmp02; // private Button button02; // private String uploadFile="/mnt/sdcard/qt.png";private Handler handler;//在子线程中更新handler.private ClientThread clientThread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.image01); Button btn = (Button) findViewById(R.id.Button01); handler=new Handler(){ @Override public void handleMessage(Message msg){ //如果消息来自子线程 if(msg.what==0x123){ //等待写入方法,更新UI bmp1=(Bitmap) msg.obj; imageView.setImageBitmap(bmp1); } } }; clientThread=new ClientThread(handler); new Thread(clientThread).start(); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { Message msg=new Message(); // msg.what=0x345;//这个没啥用。 }catch (Exception e){ e.printStackTrace(); } //byte[] data=null; /** new Thread(){ @Override public void run(){ Socket socket = null; try { socket = new Socket("192.168.2.109", 40000); DataInputStream dataInput = new DataInputStream(socket.getInputStream()); int size = dataInput.available();//变成available()会不会好点 byte[] data = new byte[size]; //int len = 0; // while (len < size) { // len += dataInput.read(data, len, size - len); // } dataInput.read(data,0,data.length); YuvImage yuvimage=new YuvImage(data, ImageFormat.NV21,20,20,null); ByteArrayOutputStream baos=new ByteArrayOutputStream(); yuvimage.compressToJpeg(new Rect(0,0,20,20),80,baos); byte[]jdata=baos.toByteArray(); bmp=BitmapFactory.decodeByteArray(jdata,0,jdata.length); //bmp = BitmapFactory.decodeByteArray(data, 0, data.length); //bmp.compress(Bitmap.CompressFormat.PNG, 100, outPut); new Thread(new Runnable() { @Override public void run() { imageView.setImageBitmap(bmp); } }).start();//在子线程中更新页面 //Bitmap bitmap = BitmapFactory.decodeStream(dataInput); //myHandler.obtainMessage().sendToTarget(); } catch (IOException e) { e.printStackTrace(); } } }.start();*/ //btn.setOnClickListener(new OnClickListener() { }}); } public class ClientThread implements Runnable{ private Socket s; private Handler handler; public Handler revHandler; DataInputStream dataInput=null; OutputStream os=null; public ClientThread(Handler handler){ this.handler=handler; } public void run(){ try{ s=new Socket("192.168.2.109", 40000); dataInput = new DataInputStream(s.getInputStream()); new Thread(){//开启线程,处理socket输入。 @Override public void run(){ try { // int size = dataInput.available();//变成available()会不会好点 //byte[] data = new byte[size]; // dataInput.read(data); // dataInput.read(data,0,data.length); /**YuvImage yuvimage=new YuvImage(data, ImageFormat.NV21,480,320,null); ByteArrayOutputStream baos=new ByteArrayOutputStream(); yuvimage.compressToJpeg(new Rect(0,0,20,20),80,baos); byte[]jdata=baos.toByteArray(); bmp=BitmapFactory.decodeByteArray(jdata,0,jdata.length);*/ ByteArrayOutputStream outPut = new ByteArrayOutputStream(); bmp=BitmapFactory.decodeStream(s.getInputStream()); bmp.compress(Bitmap.CompressFormat.PNG, 100, outPut); //bmp = BitmapFactory.decodeByteArray(data, 0, data.length); /**ByteArrayOutputStream outPut = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, outPut); bmp = BitmapFactory.decodeByteArray(data, 0, data.length);*/ Message msg=new Message(); msg.what=0x123; msg.obj=bmp; handler.sendMessage(msg); }catch (IOException e){ e.printStackTrace(); } } }.start(); }catch (IOException e){ e.printStackTrace(); } } } }
阅读全文
0 0
- 电脑作为服务器,安卓手机作为客户端,通过Socket传输图片
- Android实现PC端作为服务器,手机作为客户端Socket通信
- Android作为服务器与PC作为客户端通过USB通信
- Android作为服务器通过USB使用Socket协议向PC客户端发送文件
- 安卓客户端通过socket与服务器进行通讯
- jersey作为图片服务器
- 如何通过SecureCRT作为客户端连接Linux服务器
- socket服务器、客户端传输
- c++ 通过socket(网络套接字)传输图片(客户端)
- FL2440 通过Socket使开发板作为服务器支持多个客户端连接并与之通信,可通过命令获取当前温度。
- Linux作为服务端,Windows作为客户端socket通信
- 利用wifi在电脑和安卓手机传输文件
- 安卓TextView显示图片与文字作为底部菜单
- 关于如何在同一台电脑上的两个安卓模拟器之间的socket通信(图片传输)
- 以自己的电脑作为服务器,Android端通过JSON来传递数据到后台
- 【Android学习笔记】Android作为客户端与Linux服务器端通过Socket连接
- 安卓实现拍照、在手机中选择图片通过webservice上传图片到服务器
- 安卓实现拍照、在手机中选择图片通过webservice上传图片到服务器
- Android OOM出现常见原因及解决办法
- Spring MVC之@RequestBody, @ResponseBody 详解
- 深入理解HTTP协议
- Android UI 自动化测试之UiObject
- 多语言网站(如何实现网站的多语言版本?)
- 电脑作为服务器,安卓手机作为客户端,通过Socket传输图片
- [js]03css基础
- 我的第一篇博客
- 域服务篇 05. 用户 ❀ Windows Server 2016
- adb命令打开系统设置界面
- hdu1013 Digital Roots
- 将framework 发布到cocoapods
- intellij idea使用指南—— 导入Eclipse的Web项目
- 严重: Exception starting filter struts2 Unable to load configuration