2012-08-02 2 views
0

안드로이드 플랫폼에서 소켓 프로그래밍이 어떻게 작동하는지 보여주기 위해 간단하게하기 위해 thread/asyntask없이 간단한 소켓 프로그램을 개발하고 가능한 경우 예외가 잡히지 않도록하고 싶습니다. 그게 가능하니? 나는 시도했으나 작동하지 않는다 (소켓이 다른 스레드에서 실행하는 것이 더 좋다는 많은 지적이있다).Android 주 스레드에서 간단한 소켓 앱을 개발할 수 있습니까?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tv = (TextView) findViewById(R.id.TextView01); 
    tv.setText("Nothing from client yet"); 

} 


public Void handleOnClick(View v) { 
    Socket s = null; 
    try { 
    ss = new ServerSocket(SERVERPORT); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    try { 
    s = ss.accept(); 
    BufferedReader input = new BufferedReader(
     new InputStreamReader(s.getInputStream())); 
    String st = null; 
    st = input.readLine(); 
    mClientMsg = st; 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 

답변

0

당신은 AsyncTask를 사용하지 않고 무엇을 개발할 수 있지만 응용 프로그램이 작업이 완료 될 때까지 차단하는 것처럼 나는 확실히 (나는 확신 당신이 이미 알고있는)하지 않는 것이 좋습니다! 이 경우 OS가 프로세스를 중지시키지 않도록 소켓을 충분히 빠르게 응답해야합니다 (토론은 ANR here 참조).

한 지점 또는 다른 지점에서 예외를 처리해야합니다. 당신이 할 수있는 최선의 방법은 당신의 메소드가 예외를 던져서 메소드가 호출 될 때마다 그것들을 처리하도록하는 것입니다. 그러나 이것이 당신이 그것들을 처리 할 필요가 없다는 것을 의미하지는 않습니다. 이것은 단지 그들을 지연시킬 것입니다. 이 다른 사람에 대한 예 또는 데모를 될 운명이되면 사람들이 일 제대로을 배울 수 있도록

public Void handleOnClick(View v) throws IOException { 
    Socket s = null; 
    ss = new ServerSocket(SERVERPORT); 
    s = ss.accept(); 
    BufferedReader input = new BufferedReader(
      new InputStreamReader(s.getInputStream())); 
    String st = null; 
    st = input.readLine(); 
    mClientMsg = st; 
} 

, 그것은 잘 구조화되어야한다. 나는 그들이 처리되어야하는 예외를 처리하는 것을 고려할 것을 강력히 권장한다. (또는 체인 위로 예외를 던지면된다.) 또한 수업이나 개인에게 이러한 것을 가르치는 경우 ANR을 사용하여 피하는 방법을 시연해야합니다.

+0

(늦게 응답하여 죄송합니다.) 감사. 그것은 작동합니다. – Suki

관련 문제