1

내 Android 프로젝트에는 방금 "MainActivity.java"액티비티가 있습니다. 같은 패키지 "GetSocket.java"에 다른 클래스 파일을 추가했습니다.자바 소켓 프로그래밍 - 안드로이드 4.1에서 작동하지 않을까요?

GetSocket.java의 기능은 소켓 연결을 통해 웹 사이트에서 호스팅되는 특정 서버로 문자열을 반환한다는 것입니다. GetSocket.java는 Java 응용 프로그램으로 단독 실행되는 경우 잘 작동합니다.

그러나 Android 액티비티를 사용하여 호출 할 때 의도 한 메시지가 반환되지 않고 그냥 StackTrace를 얻을 수없는 예외로 인해 실패합니다.

Android 4.1 버전에서 실행했을 때의 결과입니다.

그러나 동일한 코드가 Android 2.2에서 작동하며 원하는 메시지를받습니다.

MainActivity.java

public class MainActivity 
{ 
TextView t= (TextView) getViewById(R.id.textView1); 
//.. 
//some code 
//.. 
String msg=GetSocket.getMessage(); 

//.. 
//some more code 
// 
} 

GetSocket.java는

public class GetSocket 
{ 
public static String getMessage() 
{ 
    String b; 
    Socket s=new Socket("<IP-Address",<Port-number>); 
    InputStream i=s.getInputStream(); 
    int length=i.read(b) 
    return b; 
} 
} 
+2

NetworkOnMainThreadException에 대해 읽어보십시오. 이것에 대한 몇 가지 게시물이 있습니다. NetworkOnMainThreadException에 대해 – Rajesh

+0

+1. 이 예외를 피하기위한 한 가지 방법은 [AsyncTask] (http://developer.android.com/reference/android/os/AsyncTask.html)를 사용하는 것입니다. 소켓 응용 프로그램에서 잘 작동합니다. – jedwards

답변

2

합니다. 내 솔루션에 문제가 있음을 알았습니다. 4.0에서 안드로이드는 UI 스레드를 통한 소켓 프로그래밍을 허용하지 않습니다. Async Task를 사용하여 별도의 백그라운드 스레드에서 소켓을 처리했습니다. 그것은 효과가 있었다.

1

인터넷 권한을 매니페스트를 확인 :) 후반 응답 죄송