서버 (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","완료");
}
};
}
이미지 연속수신문제인데;;; 중간에서 작동이 안되요 ㅠㅠ 부탁드립니다.
빨간 글씨부분이요 ㅠㅠ