서버 (java 기반)

import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;

import javax.imageio.ImageIO;

public class hello implements Runnable{
 static ServerSocket server;
 static Socket s;
 static DataOutputStream dos;
 static DataInputStream dis;
 static InputStream is;
 static PrintWriter bw;
 static BufferedReader br;
 static FileInputStream out;
 static String selected = null;
 public static void screen(){
    
     try
        {
            // 전체 화면 Capture
            BufferedImage screencapture = new Robot().createScreenCapture(
                    new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
           
            // JPEG 저장.
            File file = new File("C://test1.jpg");
            ImageIO.write(screencapture, "jpg", file);  
           
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
   
  }
 public static void send_screen() throws IOException{
  String filew="test1.jpg";
  System.out.println("파일명수신 : "+filew);
  bw.println(filew);
  bw.flush();

 
  hello.screen();
  File f=new File("c:\\",filew);
  
  out = new FileInputStream(f);
  dis = new DataInputStream(out);//tf.getText())));
  dos=new DataOutputStream(s.getOutputStream());
  
  int b=0;
  System.out.println("버퍼 보내기준비 생성완료");
  while( (b=dis.read())!=-1){   dos.writeByte(b);    }
  
  
  dos.flush();
  dos.close();
  dis.close();
  out.close();
  dos=null;
  dis=null;
  out=null;
  System.out.println("버퍼 보내기완료");
  
  
 }
 public void run(){
   /* 3333포트로 서버소켓을 생성 */
   
  
    /* 클라이언트가 접속할때 까지 기다림 */
    /* 접속하게 되면 클라이언트와 데이터를 주고 받을수 있는 유일한 소켓을 열어줌 */ 
  System.out.println("서버가 열렸습니다.");
   try {
    server=new ServerSocket(6565);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   try {
    s = server.accept();
    System.out.println("연결 되었습니다.");
    is = s.getInputStream();
    bw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())),true);
    br = new BufferedReader(new InputStreamReader(is));
    String screen_ok=null;
    try{
    while(screen_ok==null)
    {
     
     System.out.println("대기");
     screen_ok=br.readLine(); //처음은 실행되지만 2번째 부턴 넘어오질 않아요.
      
     System.out.println("확인 : "+screen_ok);
     System.out.println("호출전 대기");
     
     
     if(screen_ok.equals("screen"))
     {   System.out.println("화면캡쳐메뉴 호출");
      hello.send_screen();
      screen_ok=null;
     }
     else
     {
      screen_ok=null;
     }
     
       
    }
    }catch(SocketException e){}catch(NullPointerException e){}
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
   
   
    
  
  
  
   
   }
 
 public static void main(String args[]) throws Exception{ 
 
  hello mt = new hello();
  Thread myth = new Thread(mt);
  myth.start();
 
 
 }
 
 }

 

  
  
클라이언트 (안드로이드)

 

package socket.client;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

 

public class Remotview_login extends Activity {

 private String fileName=null;
    private Handler mHandler;
    private Socket socket;
    private BufferedReader br;
    private BufferedWriter networkWriter;
   
    private InputStream is;
    private InputStream istwo;
    private ImageView img; //추가
    private Bitmap bitmap;
    private FileOutputStream out;
    private PrintWriter bw;
   
    private String ip = "220.90.181.109"; // IP
    private int port = 6565; // PORT번호
   

   
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        try {
         socket.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void setSocket(String ip, int port) throws IOException {
        try {
           
         socket = new Socket(ip, port);  //소켓 초기화    
           bw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
           is = socket.getInputStream();
           istwo = socket.getInputStream();
     br = new BufferedReader(new InputStreamReader(istwo));
    
           Log.i("hakdata","스트림생성");
                //버퍼 변수 2개 정의
        } catch (IOException e) {
             System.out.println(e);
             e.printStackTrace();
        }
     }
 
     public void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        mHandler = new Handler();
       
       
  Intent intent = getIntent();
  Bundle myBundle = intent.getExtras();   
  ip =  myBundle.getString("ipnum");
  port =  myBundle.getInt("portnum");
  Toast.makeText(Remotview_login.this, "Coming word: " + ip,Toast.LENGTH_SHORT).show();
       
  

  
  
         try {  //소켓 생성 메서드 호출
            setSocket(ip, port);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
      
        checkUpdate.start();  //쓰레드 생성 메시지 받을 쓰레드
         final EditText et = (EditText) findViewById(R.id.EditText01);
        Button btn = (Button) findViewById(R.id.Button01);
        //final TextView tv = (TextView) findViewById(R.id.TextView01);
        img = (ImageView)findViewById(R.id.image);
        bitmap = BitmapFactory.decodeFile("/sdcard/"+fileName);
     img.setImageBitmap(bitmap);
    /* btn.setOnClickListener(new OnClickListener() {  //이벤트 발생
         public void onClick(View v) {
                if (et.getText().toString() != null  || !et.getText().toString().equals("")) {
                   
                    String return_msg = et.getText().toString();  //텍스트 string 형 변경
                
                    bw.println(return_msg);  //소켓 전달
                    bw.flush();
                }
            }
           
        });*/
        
    }
public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
         MenuItem item=menu.add(0,1,0,"제어시작 / 제어종료");
         item.setAlphabeticShortcut('a');
         menu.add(0,2,0,"컴퓨터 잠그기 / 풀기");
         menu.add(0,3,0,"프린트");
         //menu.add(0,4,0,"탐색기");
         menu.add(0,4,0,"탐색기");
         menu.add(0,5,0,"종료");
         return true;
        
}
public boolean onOptionsItemSelected(MenuItem item){
 switch(item.getItemId())
 {
 case 1:
   Toast.makeText(this,"짜증은 달콤해", Toast.LENGTH_LONG).show();
   return true;
 case 2:
   Log.i("ddd","2번확인");
  return true;
 case 3:
  Toast.makeText(this,"짜증은 달콤해", Toast.LENGTH_LONG).show();
  return true;
 case 4:
  Toast.makeText(this,"짜증은 달콤해", Toast.LENGTH_LONG).show();
  return true;
 case 5:
  Toast.makeText(this,"짜증은 달콤해", Toast.LENGTH_LONG).show();
  return true;
 
 }
 return false;
}


 private Thread checkUpdate = new Thread()   {  //이미지받기
 
  int i=0;
  String fileName2="test1.jpg";
  public void run() {        
   
   
   try {
    
     Log.i("hakdata","대기");
      
       bw.println("screen");
       bw.flush();
       br = new BufferedReader(new InputStreamReader(istwo));
         fileName = br.readLine();
         
         br=null;
      Log.i("hakdata","파일네임은"+fileName);
   
      try {
       Log.i("hakdata","파일생성전");
       File f=new File("/sdcard/"+fileName2);
       Log.i("hakdata","파일생성완료");
       out=new FileOutputStream(f);
       while((i=is.read())!=-1)
       { out.write ((char)i); } //이미지 수신
       out.flush();
       
       out=null;
       Log.i("hakdata","받기완료?");
       mHandler.post(showUpdate);
      
     } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }  
   
     //Log.i("hakdata","3");
     //Log.i("hakdata","중완");
      
     
     bw.println("screen");  확인차 보내봄;;
      bw.flush(); 
     
    
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
     
    
  
  
}
 };


private Runnable showUpdate = new Runnable() {
       public void run() {
        /*
           //Toast.makeText(Remotview_login.this, "Coming word: " + html,Toast.LENGTH_SHORT).show();
           final EditText ett = (EditText) findViewById(R.id.EditText02);
           //Toast는 화면에 오류 보고 처럼 임시적으로 출력했다가 사라지는 기능(글자수 제한있음)
        
           ett.setText(String.format(html));
            //text 박스 초기화 및 새로고침 구현
           */
      
        img = (ImageView)findViewById(R.id.image);
        bitmap = BitmapFactory.decodeFile("/sdcard/"+fileName);
        img.setImageBitmap(bitmap);
        Log.i("ddd","완료");
       
       }
};
 }

 

 


 

 

이미지 연속수신문제인데;;; 중간에서 작동이 안되요 ㅠㅠ 부탁드립니다.

 

빨간 글씨부분이요 ㅠㅠ