마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

액티비티간 소켓통신의 관한 오류 AsyncTask 오류

0 추천

//소켓통신하는 고

public class NetworkTask extends AsyncTask<Void, Void, Void> {

  String dstAddress;
  int dstPort;

  NetworkTask(String addr, int port) {
   dstAddress = addr;
   dstPort = port;
  }

  @Override
  protected Void doInBackground(Void... arg0) {

   try {

    socket = new Socket(dstAddress, dstPort);
    Log.d(LOG, "소켓생성");
    socket_out = new DataOutputStream(socket.getOutputStream());
    Log.d(LOG, "소켓 출력");
    socket_in = new DataInputStream(socket.getInputStream());
    Log.d(LOG, "소켓 입력");
    while (true) {
     data = socket_in.read();
    }
   } catch (UnknownHostException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    if (socket != null) {
     try {
      socket.close();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
   }
   return null;
  }

  @Override
  protected void onPostExecute(Void result) {
   super.onPostExecute(result);
  }
 }


A 액티비티에서는 ip와 port 번호 를 입력받아서 B액티비에서 값을 넘겨받아서 ip와 port를 값을 넘겨받아서 B액티비티에서 마우스와 키보드를 제어할 액티비티 화면 마우스 액티비티와 키보드 액티비가 있습니다.

근데 제가 먼저 마우스를 선택해서 소켓통신을 하면 잘된 후에 선택화면으로 finish()는 안주고 뒤로 간뒤 선택화면에서 키보드를 사용하면 앱이 중지됨으로 뜨게 됩니다. 에러는 서버쪽에서

public class ServerTest implements Runnable {
 public static void main(String[] args) {
  Thread desk = new Thread(new ServerTest());
  desk.start();
 }

 @Override
 public void run() {
  try {
  // TODO Auto-generated method stub
  ServerSocket serverSocket = null;
  Socket clientSocket = null;
  DataOutputStream out = null;
  DataInputStream in = null;

  KeyBoard k = new KeyBoard();
  Mouse m = new Mouse();

  serverSocket = new ServerSocket(3333);
 
   clientSocket = serverSocket.accept();
   System.out.println("Client connect");
   out = new DataOutputStream(clientSocket.getOutputStream());
   in = new DataInputStream(clientSocket.getInputStream());

   int mouseX = 0, mouseY = 0;
   while (true) {
    int i = 0;  
    System.out.println("read i의 값은: "+i);
    i = in.readInt(); //
    System.out.println("클라이언트로부터 받은 int : " + i);
    out.writeInt(i);
    Point position = MouseInfo.getPointerInfo().getLocation();
    switch (i) {

빨간색 부분에서

java.lang.Thread.run(Unknown Source) 이런에러가 뜹니다.

이유가 무엇인지 궁금합니다

 

열심히하는 (160 포인트) 님이 2014년 11월 6일 질문

1개의 답변

0 추천
예외 내용을 자세히 올려주세요.

 

그리고 서버와 클라이언트 모두 연결 되자마가 읽으려고만 하고 데이터를 쓰는 쪽이 없네요.
원조안드로이드 (58,190 포인트) 님이 2014년 11월 6일 답변
클라이언트부분에선 따로 출력부분이 있고 서버쪽에서 클라이언트 부분 출력한부분을 보내면 그걸 읽어서 서버에서 클라이언트로 출력하면 해결되나요?
...