2014-06-13 6 views
1

는 내 컴퓨터에있는 서버에 UDP를 통해 메시지를 전송하는 작은 자바 코드 스크립트를 작성했습니다 : 내가 네트워크에있는 다른 컴퓨터에서 동일한 코드를 시도왜 안드로이드에서 내 UDP 메시지가 작동하지 않습니까?

@Override 
public void onClick(View view) { 
    try { 
     DatagramSocket clientSocket = new DatagramSocket(); 
     InetAddress IP = InetAddress.getByName("192.168.1.5"); 
     byte[] sendData = new byte[1024]; 
     String sentence = "HELLO"; 

     sendData = sentence.getBytes(); 

     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IP, 9876); 
     clientSocket.send(sendPacket); 

     clientSocket.close(); 
    } catch(IOException e) { 

    } 
} 

을하고, 메시지는 제대로 전송 받았습니다. 안드로이드 폰에서 이걸 실행하려고 할 때, 서버는 그것을받지 못할 것입니다. 왜 그런가요?

내가 매니페스트에 인터넷 permisson를 추가 깜빡했다, 그러나 나는 것을했을 때, 응용 프로그램 충돌이 나는 버튼을 클릭하면

편집 :

06-13 21:14:26.932 13501-13501/com.example.omgandroid E/AndroidRuntime﹕ FATAL EXCEPTION: main 
android.os.NetworkOnMainThreadException 
     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144) 
     at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175) 
     at libcore.io.IoBridge.sendto(IoBridge.java:466) 
     at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182) 
     at java.net.DatagramSocket.send(DatagramSocket.java:284) 
     at com.example.omgandroid.MainActivity.onClick(MainActivity.java:72) 
     at android.view.View.performClick(View.java:4475) 
     at android.view.View$PerformClick.run(View.java:18786) 
     at android.os.Handler.handleCallback(Handler.java:730) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:176) 
     at android.app.ActivityThread.main(ActivityThread.java:5419) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:525) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
     at dalvik.system.NativeStart.main(Native Method) 
06-13 21:14:38.987 13501-13501/com.example.omgandroid I/Process﹕ Sending signal. PID: 13501 SIG: 9 

는 어떤이의 원인이 될 수 있습니까?

+0

로컬 네트워크를 사용중인 Android 휴대 전화의 경우? 셀룰러 데이터를 통해 나가는 경우 '192.168'네트워크 블록을 사용할 수 없으며 '전용'블록이며 라우팅 할 수 없습니다. 셀 데이터 공급자는 문자 그대로이 IP 주소가있는 곳을 ** NO ** 아이디어로 가지고 있습니다. –

+0

물론 휴대 전화는 Wi-Fi에 연결되어 있지만 메시지가 wifi 또는 3g를 통해 전송되는지 여부는 확실하지 않습니다. 어떻게 알 수 있습니까? – theva

+0

잡으려는 예외를 확인하고 어떤 것이 올라가고 있는지 확인하십시오. 내 생각 엔 안드로이드 매니페스트에서 인터넷 권한을 요청하는 것을 잊어 버린 것 같습니다. – Pieces

답변

2

Android는 기본 스레드 (NetworkOnMainThreadException)의 네트워크 연결을 허용하지 않으므로 사용자 인터페이스를 차단하지 않습니다. 그들은 사용자 인터페이스가 반응적이고 네트워크 작업에 의해 차단되지 않기를 원하기 때문에 사용자는 응용 프로그램이 추락했다고 생각하지 않을 것입니다.

새 스레드에서 네트워크 작업을해야합니다.

AsyncTask이 좋습니다.

관련 문제