안드로이드 개발 질문/답변
(글 수 45,052)
안드로이드 프로그래밍 초보입니다. 한지얼마않되서 아무것도 모르겠네요;;;
질문은 현재 안드로이드에서 객체를 서버로 넘기는 걸하는데 안드로이드쪽에서 터치가 발생하면
그지점(FX,FY)의 터치값을 받고 터치가 끝나면 끝난지점(LX,LY)의 값을 받아서 뺀값도 같이 보내를 겁니다.
즉 총 6개의 int값을 객체에 담아 전송하고싶은데 에뮬에서는 화면 터치는 일어나는데 Socket이 전혀 보내지지 않내요;;;
//FrameSever.java
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class Eventhandler implements WindowListener{
public void windowActivated(WindowEvent arg0) {}
public void windowClosed(WindowEvent arg0) {}
public void windowClosing(WindowEvent e) {
e.getWindow().setVisible(false);
e.getWindow().dispose();
System.exit(0);
}
public void windowDeactivated(WindowEvent arg0) {}
public void windowDeiconified(WindowEvent arg0) {}
public void windowIconified(WindowEvent arg0) {}
public void windowOpened(WindowEvent arg0) {}
}
public class FrameSever {
public static void main(String[] args ) throws AWTException{
Frame frame = new Frame("ControlMSG");
frame.setSize(400,200);
frame.setLayout(new FlowLayout());
TextArea comments = new TextArea(10,50);
frame.add(comments);
comments.selectAll();
frame.addWindowListener(new Eventhandler());
frame.setVisible(true);
ServerSocket serverSocket = null;
Socket socket = null;
ObjectInputStream ios = null;
Object obj=null;
try {
serverSocket = new ServerSocket(3333);
comments.append("Server Start\n");
}catch(Exception e){}
while(true){
try{
socket= serverSocket.accept();//연결대기
comments.append("ClientSocket In\n");
ios= new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
comments.append("read -start- \n");
obj =ios.readObject();
ObjeData da= (ObjeData)obj;
ios.close();//Stream을 비움
socket.close();//소켓을 비움
} catch (IOException e) { }
catch(ClassNotFoundException ee){}
comments.append("raed - out- \n");
}
}//main-out
}//class-out
-서버는 java 대 java 간에는 통신이 되고있습니다.
문제는 클리이언트로 쓸 안드로이드인데 도통모르겠네요
//SocktestActivity.java
package sock.Socktest.client;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
public class SocktestActivity extends Activity {
private int FtouchX ,FtouchY;
private int LtouchX,LtouchY;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View vw = new View(this);
vw.setOnTouchListener(TuchListener);
setContentView(vw);
}
class TouchListenerClaee implements View.OnTouchListener
{
public boolean onTouch(View v,MotionEvent event){//터치 방향
if(event.getAction()==MotionEvent.ACTION_DOWN){
int ftouchX= (int)event.getX();
FtouchX=ftouchX;
int ftouchY= (int)event.getY();
FtouchY=ftouchY;
Toast.makeText(SocktestActivity.this, "ACTION_DOWN", Toast.LENGTH_LONG).show();
return true;
}
else if(event.getAction()==MotionEvent.ACTION_UP){
int ltouchX=(int)event.getX();
LtouchX=ltouchX;
int ltouchY=(int)event.getY();
LtouchY=ltouchY;
Toast.makeText(SocktestActivity.this, "ACTION_UP", Toast.LENGTH_LONG).show();
return false;
}
SockClient sock = new SockClient(FtouchX,FtouchY,LtouchX,LtouchY );
sock.run();
return false;
//
}//onTouch
}
TouchListenerClaee TuchListener =new TouchListenerClaee();
}
-빌드에 보면 위쪽은 돌아가는것같습니다. 근데 다음 파일에서 연결을 못하는 것같아요
//SockClient.java
package sock.Socktest.client;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SockClient implements Runnable {
private int FtouchX,FtouchY,LtouchX,LtouchY;
private int DtouchX,DtouchY;
public SockClient(int FtouchX,int FtouchY,int LtouchX,int LtouchY)
{
this.FtouchX=FtouchX;
this.FtouchY=FtouchY;
this.LtouchX=LtouchX;
this.LtouchY=LtouchY;
DtouchX=FtouchX-LtouchX;
DtouchY=FtouchY-LtouchY;
}
public void run(){
ObjeData data=new ObjeData();
data.Fx=FtouchX;
data.Fy=FtouchY;
data.Lx=LtouchX;
data.Ly=LtouchY;
data.Dx=DtouchX;
data.Dy=DtouchY;
Socket sock;
try {
sock = new Socket("127.0.0.1",3333);
ObjectOutputStream oos=new ObjectOutputStream
(new BufferedOutputStream(sock.getOutputStream()));
oos.writeObject(data);
oos.flush();
oos.close();
sock.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-공통으로 쓰는 객체파일입니다.
//ObjeData.java
package sock.Socktest.client;
import java.io.Serializable;
public class ObjeData implements Serializable{
int Fx;
int Fy;
int Lx;
int Ly;
int Dx;
int Dy;
}