android app 与电脑wifi通信(二)

前些天实现了简单字符的与电脑的传输,今天写写从电脑本地读取一张照片,然后传输给app,利用android bitmap在界面上显示出来

首先是电脑上的服务器端:

try {  
            ServerSocket server = new ServerSocket(30002);
            Socket socket = server.accept();  
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());  
            FileInputStream fis = new FileInputStream("D:/01.jpg");  
            int size = fis.available();
            System.out.println("size = "+size);
            byte[] data = new byte[size];    
            fis.read(data);
            dos.write(data);  
            dos.flush();  
            dos.close();  
            fis.close();  
            socket.close();  
            server.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
然后是客户端,注意在新线程中不能修改主线程中的界面,所以只能利用bundle发信号是主界面上的图片改变,网上好多版本,均有一些问题,以下是我自己想得觉得最简洁的写法了:

新建一个handler对象,接收子线程信号:

 Handler myh=new Handler (){
        @Override
        public void handleMessage(Message m){
            if (m.what == 0x1233){
                imageView.setImageBitmap(bmp);<span style="white-space:pre">	</span>//修改图片
            }
        }
    };
下面是按钮的触发:

btn.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
             new Thread() {
             @Override
             public void run() {
                  try {
                      Socket socket = new Socket("192.168.23.1", 30002);
                       InputStream is=socket.getInputStream();
                       bmp = BitmapFactory.decodeStream(is);
                       myh.sendEmptyMessage(0x1233);<span style="white-space:pre">		</span>//向子线程发送命令
                       socket.close();
                   } catch (IOException e) {
                       e.printStackTrace();
                   }
                }
             }.start();
}

虽然很简单但是自己也研究了好久,下一步是争取读视频,慢慢来。。。

你可能感兴趣的:(android,socket)