2015-01-11 3 views
0

HTC Wildfire S (API10, android 2.3.3)에서 코드를 사용할 때 정상적으로 작동합니다. 하지만 삼성 갤럭시 S4 (API19, android 4.4.2)를 실행하면 작동하지 않습니다 (응용 프로그램이 시작되고 닫히고 아무 일도 일어나지 않습니다). 서버가 로컬 컴퓨터에 있습니다 (Hercules 프로그램). 물론 매니페스트에 (인터넷) 권한을 추가했습니다.TCP 클라이언트 소켓이 api19에서 작동하지 않습니다.

코드는 다음과 같습니다

try{ 
    Socket s = new Socket("192.168.1.13", 6914); 
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
    String outMsg = ""; 
    outMsg = "This is Client"; 
    out.write(outMsg); 
    out.flush(); 
    out.close(); 
    s.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

그래서 당신이 나를 도와 어디에 문제가 보여줄 수 있을까? 나는 내 삼성 전화를 뿌리 뽑지 않았다.

+0

주 스레드에서이 코드를 실행하고 있습니까? 로그가 있습니까? –

+0

방금 ​​읽은 앱 ("앱이 응답하지 않게 될 것입니다. 허니컴 전에는 허니컴을 사용하기 전에 허니 콤과 새로운 Android 버전이 확인하고 예외를 throw합니다."), 그래서 나는 이 스레드를 메인 스레드에서 실행하지 마십시오. 나는 스레드없이 MainActivity에서 이것을 실행한다. 그래서 이것이 문제입니까? 이제 로그를 볼 수 없습니다. – user3681087

+0

예, 이것이 문제입니다. 나는 그것을 대답으로 자세히 설명 할 것이다. –

답변

0

메인 (UI) 스레드에서 네트워크 관련 코드를 실행하는 것처럼 보입니다. Android 1.x 및 2.x에서는 UI가 정지 될 수 있으므로 권장하지 않았습니다. Android 3.x 이후 (Android 4.x 및 5.0에서도 여전히 유효 함) 플랫폼에 의해 엄격히 금지되었습니다. 로그를 읽을 수있는 경우 NoNetworkInMainThreadException이 표시됩니다. 당신이 (당신이 어떤 점에서 필요 아마 것이다) 주 스레드에서 다시 결과를 얻을해야하는 경우

new Thread() { 
    public void run() { 
     // Your network code, it will run on another thread 
    } 
}.start();

:

내가 당신이 Thread를 사용하는 것이 좋습니다 것, 테스트의이 종류를 달성하기 위해 AsyncTask과 같은보다 복잡한 패턴을 살펴보고 싶을 것입니다.

+0

고맙습니다. 나는이 일을 믿는다. – user3681087

관련 문제