电脑作为服务器,安卓手机作为客户端,通过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
原创粉丝点击