현재 안드로이드 어플과 wifi모듈과 소켓통신으로 연결해서 통신테스트를 하는중입니다.

 

메뉴상에서 wifi모듈과 연결및 연결해지를 메뉴버튼을 통해서 하고있습니다.

 

문제는 어플쪽에서 WIFI모듈과 소켓연결하는 부분을 먼저 수행한 다음에  WIFI소켓 해제하는 부분을 수행한후

 

다시 WIFI모듈과 소켓 연결하는 부분을 수행하면 뻗어버리

 

처음 연결과 연결해제는 잘 되는데 해제후 다시 연결하면 프로그램이 뻗어버리네요... 문제는 스레드를 두번 스타트하는것이

 

문제인거같은데  인터넷에서 검토했던 인터럽트를 걸어 while문에서 빠져나오거나 하는 방법등을 사용해 봤는데 여전합니다.

 

 

문제가 뭔지 알수가없습니다.  도와주세요~~~~

 

 

고수님들 원인좀 봐주세요...

 

-----WIFI모듈과 소켓 연결하는 부분입니다.------------------------

case MENU_ITEM_WIFI_CONNECT:
   // Launch the DeviceListActivity to see devices and do scan
   try {
        startTimer();
       
              setSocket(ip, port);
              output = new BufferedOutputStream(socket.getOutputStream());

           //input = new BufferedInputStream(socket.getInputStream());
             
               //checkUpdate.setDaemon(true);
               checkUpdate.start();// 쓰레드 시작부분인데 이 부분을 한번 연결한후 다시 연결하면 다운되어 버립니다.
           
              
              Toast.makeText(getBaseContext(), "WIFI 모듈과 연결되었습니다.", 0).show();
              wifiPaired = true;
             
             
              //WIFI의 경우 Connetc메세지를 전송해줌
              
                           
         } catch (IOException e1) {
             // TODO Auto-generated catch block
             //e1.printStackTrace();
                //Log.e("TCP", "C: Error2", e);
          Toast.makeText(getBaseContext(), "WIFI 모듈과 연결 에러발생.", 0).show();
         }   
   return true;

 



----- 소켓 연결 해제하는 부분입니다..

 

case MENU_ITEM_WIFI_DISCONNECT:
   // Stop the Bluetooth chat services
 
   wifiPaired = false;
   Toast.makeText(getBaseContext(), "WIFI 모듈과 연결이 해제되었습니다", 0).show();
   stopTimer();
   try{
    //소켓 해제하기전 UART로 DISCONNECT 메세지를 보냄
   
    
    output.close();
    //input.close();
    //networkWriter.close();
    networkReader.close();
    
    socket.close();
    //checkUpdate.interrupt();

            //checkUpdate.stop();

   }catch(IOException e){
    
   }
   return true; 

 

 

//-------------------------------- 쓰레드 관련부분입니다.

 

private Thread checkUpdate = new Thread() {

         public void run() {

             try {

                 String line;

                 Log.w("ChattingStart", "Start Thread");

                 while (true) {

                     Log.w("socket data receive", "socket data receive");

                     line = networkReader.readLine();

                     html = line;

                     mHandler.post(showUpdate);

                 }

             } catch (Exception e) {

             }

         }

     };

 

     private Runnable showUpdate = new Runnable() {

         public void run() {
                byte[]b = html.getBytes();
               
                for (int i=0 ; i < 15 ; i++)
                {
                 receivedPacket[i] = b[i];
                }
     };

 

     public void setSocket(String ip, int port) throws IOException {

         try {

             socket = new Socket(ip, port);

            // networkWriter =  new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

             networkReader =  new BufferedReader(new InputStreamReader(socket.getInputStream()));

             

         } catch (IOException e) {

             System.out.println(e);

             e.printStackTrace();
         }
     }

 

아래는 로그에서 뻗는부분을 캡쳐한 부분입니다.