마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

UDP 소켓 RECEIVE가 안 됩니다.

0 추천
try {
    socket = new DatagramSocket(19888);
    while(true) {
        DatagramPacket p = new DatagramPacket(buf, buf.length);
        socket.receive(p);        }
    } catch (Exception e) {
        e.printStackTrace();
    }
socket.close();

}
android.os.NetworkOnMainThreadException
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:249)
libcore.io.IoBridge.recvfrom(IoBridge.java:553)
java.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:163)
java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:171)
java.net.DatagramSocket.receive(DatagramSocket.java:274)
com.example.it090.myapplication.MainActivity.onCreate(MainActivity.java:26)
android.app.Activity.performCreate(Activity.java:5937)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
android.app.ActivityThread.access$800(ActivityThread.java:144)
 
도저히 이해가 안됩니다.
<uses-permission android:name="android.permission.INTERNET" />
익명사용자 님이 2015년 12월 8일 질문
2015년 12월 8일 수정

1개의 답변

0 추천

코드는 정확 합니다.

그런데 Activity 에서 그냥 실행하셨죠?

socket.receive() 는 block 함수이기 때문에, 자료가 들어올때까지 실행이 중지되고,

app 이 멈춘 것이 되므로, 작동불능 앱을 제거하기 위해서 OS가  BlockGuard 를 동작시켰습니다.

Thread 에서 실행시켜야 합니다.

JINASYS (5,630 포인트) 님이 2015년 12월 8일 답변
오와 고맙습니다^^
엑티비에서 실행시킨게 맞습니다.
코드를 간단히 해보려고... 리시브에서 블럭없이 바로 예외처리되길래
뭔가 했습니다. 감사합니다.
...