2012-08-09 10 views
1

나와 내 동료 중 하나는 안드로이드와 아이폰 응용 프로그램 사이의 간단한 소켓 통신에 노력하고 있습니다. 우리가 지금까지 달성 한 것은 다른 스레드에서 바이트 배열을 그에게 보내고 바이트 배열을 사용할 수 있다는 것입니다. 그러나 우리가 직면하는 문제는 그가 소켓을 닫지 않으면 그가 보내는 모든 메시지를 읽을 수 없다는 것입니다. 하지만 그 소켓이 살아 있어야하기 때문에 데이터가 좋았거나 문제가 있다면 응답을 보낼 수 있습니다.안드로이드/아이폰 소켓 통신

thread = new Thread(new Runnable() { 
     public void run() { 
      try { 
       serverSocket = new ServerSocket(5000); 
       while(state){ 
         client = serverSocket.accept(); 
         client.setKeepAlive(true); 

         // LOGS 
         Log.d("","receivedBufferSize : "+serverSocket.getReceiveBufferSize()); 
         Log.d("","is connected : "+client.isConnected()); 
         Log.d("","port : "+client.getPort()); 
         Log.d("","ipadress : "+client.getInetAddress().toString()); 

         InputStream is = client.getInputStream(); 

         Log.d("","is Size : "+is.available()); 

         byte[] bytes = toByteArray(is); 
         for(int i=0;i<bytes.length;i++){ 
          Log.d("","bytes["+i+"] : "+bytes[i]); 
         } 

       } 

        serverSocket.close(); 
        Log.d("","client socket : "+client.isClosed() + " serverSocket : "+serverSocket.isClosed()); 

      } catch (UnknownHostException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    thread.start(); 

을 그는 내가 그 로그 메시지에 앉아하고, 응용 프로그램을 종료하지 않거나 소켓을 닫지 않도록 경우 : Log.d("","is Size : "+is.available()); 아무것도 정말로 일어나지 않습니다 여기에 내가 그의 메시지에 대해 청취하고 방법이다. 소켓을 닫은 후받은 바이트 배열의 바이트를 볼 수 있습니다.

내가 뭘 잘못하고 있는지 또는 어떤 종류의 제안이 있습니까/원인이 무엇입니까?

미리 감사드립니다.

답변

1

실제로 문제는 아이폰쪽에 있었는데, Objective C 구현의 입/출력 스트림 문제였습니다. 따라서이 코드는 올바르게 작동합니다.