Android 앱에서 UDP 바이트 수신 실패

JDSlimz

네트워크의 브로드 캐스트 주소에서 브로드 캐스트되는 패킷을 수신하도록 Android 앱을 프로그래밍하고 있습니다 (테스트를 거쳐 패킷이 브로드 캐스트되고 "UDP Sender / Receiver"애플리케이션에서도 수신됩니다.) 내 앱을 가져 와서 존재한다고 알려주세요. 장치가 동일한 네트워크에 있고 전송 장치의 코드가 작동하고 독점적입니다. 다음은 앱의 기본 DatagramSocket 코드입니다.

    package com.ti.cc3x.android;

import java.io.IOException;
import java.net.*;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class buttonListener extends Activity {

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listener);
        final TextView txt = (TextView)findViewById(R.id.txt1);


     new Thread( new Runnable(){
         public void run(){


                    try {
                        String text = null;
                        int server_port = 12356;
                        byte[] message = new byte[66];
                        DatagramPacket p = new DatagramPacket(message, message.length);
                        DatagramSocket s = new DatagramSocket(server_port);


                        while(text == null){
                        s.receive(p);
                        text = new String(message, 0, p.getLength());
                        txt.setText("Messed up.");
                        }

                        if(text != null){
                        Toast.makeText(buttonListener.this, text, Toast.LENGTH_LONG).show();
                        txt.setText("Received");
                        s.close();
                        }

                    }
                    catch (SocketException se) {
                        se.printStackTrace();
                        Toast.makeText(buttonListener.this, "Socket Error", Toast.LENGTH_LONG).show();
                        txt.setText("Socket Error");
                    }
                    catch (IOException ioe) {
                        ioe.printStackTrace();
                        Toast.makeText(buttonListener.this, "Network Error", Toast.LENGTH_LONG).show();
                        txt.setText("Network Error");
                    }

                 }
         }).start();

}}

도움을 주시면 감사하겠습니다!

업데이트 된 코드 :

package com.ti.cc3x.android;

import java.io.IOException;
import java.net.*;
import java.util.Arrays;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.MulticastLock;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class buttonListener extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listener);
        WifiManager wifi = (WifiManager)
        getSystemService(Context.WIFI_SERVICE);
        WifiManager.MulticastLock lock = wifi.createMulticastLock("Log_Tag");
        final TextView txt = (TextView) findViewById(R.id.txt1);
        lock.acquire();

    new Thread( new Runnable(){
        public void run(){


                   try {
                       String text = null;
                       int server_port = 12356;
                       byte[] message = new byte[66];
                       DatagramPacket p = new DatagramPacket(message, message.length);
                       DatagramSocket s = new DatagramSocket(server_port);


                       //while(text == null){
                       s.receive(p);
                       text = new String(message, 0, p.getLength());
                       txt.setText("Messed up.");
                       //}

                       //if(text != null){
                       Toast.makeText(buttonListener.this, text, Toast.LENGTH_LONG).show();
                       txt.setText("Received");
                       s.close();
                       //}

                   }
                   catch (SocketException se) {
                       se.printStackTrace();
                       Toast.makeText(buttonListener.this, "Socket Error", Toast.LENGTH_LONG).show();
                       txt.setText("Socket Error");
                   }
                   catch (IOException ioe) {
                       ioe.printStackTrace();
                       Toast.makeText(buttonListener.this, "Network Error", Toast.LENGTH_LONG).show();
                       txt.setText("Network Error");
                   }

                }
        }).start();




    lock.release();
    }
    }
윌리스

귀하의 답변에서 귀하가 보내는 테스트 패킷이 브로드 캐스트되고 있다고 언급했습니다. 패킷을 브로드 캐스트하는 대신 장치의 IP 주소로 직접 전송하면 패킷을받을 수 있는지 확인하려고 했습니까? 소켓이 제대로 작동하지만 브로드 캐스트 패킷을 수신하지 못할 가능성이 있습니다. 기본적으로 Android Wi-Fi 스택은 전력을 절약하기 위해 멀티 캐스트 패킷을 필터링합니다. IP 주소로 직접 전송 된 패킷을 수신 할 수 있다면을 획득하여 멀티 캐스트 패킷 수신을 활성화하기 만하면됩니다. MulticastLock자세한 내용은 여기에서 찾을 수 있습니다. Android 기기에서 멀티 캐스트 패키지를 수신하지 않음

그래도 직접 패킷을받을 수없는 경우 다른 문제가있을 수 있지만 먼저 확인하겠습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Wi-Fi 상태 Android 변경시 UDP 브로드 캐스트 수신 실패

분류에서Dev

브로드 캐스트를 사용하여 Unity Android 애플리케이션에서 UDP 패킷 수신

분류에서Dev

UDP 패킷 송수신을위한 서비스 작성 android

분류에서Dev

패킷 삭제없이 Java에서 UDP 수신

분류에서Dev

PHP에서 UDP 패킷 데이터 그램 수신

분류에서Dev

패킷의 UDP 바이트 순서

분류에서Dev

(Winsock) UDP 수신은 작동하지만 동일한 소켓에 대해 전송이 실패합니다.

분류에서Dev

여러 브로드 캐스트 서버에서 UDP 패킷 수신

분류에서Dev

루트가없는 Linux / Android에서 UDP 패킷에 대한 발신 인터페이스 할당

분류에서Dev

udp_receive에서 수신 한 원시 바이트를 as (코드)로 디코딩

분류에서Dev

마이크로 컨트롤러에서 UDP 패킷을 수신 할 수 없습니다.

분류에서Dev

브로드 캐스트 수신기에 대한 Android Java-> kotlin 변환 실패

분류에서Dev

Android udp 패킷 손실

분류에서Dev

Android udp 패킷 손실

분류에서Dev

Ruby 응용 프로그램이 다른 호스트에서 UDP 패킷을 수신하지 않습니다.

분류에서Dev

C #을 사용하여 Linux 방화벽 뒤에서 큰 UDP 패킷 수신 실패

분류에서Dev

C #을 사용하여 Linux 방화벽 뒤에서 큰 UDP 패킷 수신 실패

분류에서Dev

Android Studio에서 제공 한 기본 패키지 이름으로 Android 앱을 실행할 수 있습니까?

분류에서Dev

포트 포워딩없이 UDP 패킷 수신

분류에서Dev

내 Android 앱이 수신기에서 실행 중인지 어떻게 알 수 있습니까?

분류에서Dev

UDP 브로드 캐스트 수신-여러 NIC에 바인딩

분류에서Dev

Python에서 UDP 패킷을 수신 할 수없는 이유는 무엇입니까?

분류에서Dev

2 개의 클라이언트에 UDP 패킷을 보내고 하나만 수신

분류에서Dev

fusermount에서 수신 한 fd에서 데이터 읽기 실패

분류에서Dev

'Android L'에뮬레이터에서 OkHttp를 사용하여 앱 실행 실패

분류에서Dev

UDP 서버에서 패킷을 수신 할 때 별도의 스레드에서 수신해야하는 이유는 무엇입니까?

분류에서Dev

JAVA UDP 서버가 패킷을 수신 할 수 없음

분류에서Dev

Python에서 UDP의 패킷 손실 시뮬레이션

분류에서Dev

UWP WebView-OnScriptNotify 실패에 대한 수신기 이벤트

Related 관련 기사

  1. 1

    Wi-Fi 상태 Android 변경시 UDP 브로드 캐스트 수신 실패

  2. 2

    브로드 캐스트를 사용하여 Unity Android 애플리케이션에서 UDP 패킷 수신

  3. 3

    UDP 패킷 송수신을위한 서비스 작성 android

  4. 4

    패킷 삭제없이 Java에서 UDP 수신

  5. 5

    PHP에서 UDP 패킷 데이터 그램 수신

  6. 6

    패킷의 UDP 바이트 순서

  7. 7

    (Winsock) UDP 수신은 작동하지만 동일한 소켓에 대해 전송이 실패합니다.

  8. 8

    여러 브로드 캐스트 서버에서 UDP 패킷 수신

  9. 9

    루트가없는 Linux / Android에서 UDP 패킷에 대한 발신 인터페이스 할당

  10. 10

    udp_receive에서 수신 한 원시 바이트를 as (코드)로 디코딩

  11. 11

    마이크로 컨트롤러에서 UDP 패킷을 수신 할 수 없습니다.

  12. 12

    브로드 캐스트 수신기에 대한 Android Java-> kotlin 변환 실패

  13. 13

    Android udp 패킷 손실

  14. 14

    Android udp 패킷 손실

  15. 15

    Ruby 응용 프로그램이 다른 호스트에서 UDP 패킷을 수신하지 않습니다.

  16. 16

    C #을 사용하여 Linux 방화벽 뒤에서 큰 UDP 패킷 수신 실패

  17. 17

    C #을 사용하여 Linux 방화벽 뒤에서 큰 UDP 패킷 수신 실패

  18. 18

    Android Studio에서 제공 한 기본 패키지 이름으로 Android 앱을 실행할 수 있습니까?

  19. 19

    포트 포워딩없이 UDP 패킷 수신

  20. 20

    내 Android 앱이 수신기에서 실행 중인지 어떻게 알 수 있습니까?

  21. 21

    UDP 브로드 캐스트 수신-여러 NIC에 바인딩

  22. 22

    Python에서 UDP 패킷을 수신 할 수없는 이유는 무엇입니까?

  23. 23

    2 개의 클라이언트에 UDP 패킷을 보내고 하나만 수신

  24. 24

    fusermount에서 수신 한 fd에서 데이터 읽기 실패

  25. 25

    'Android L'에뮬레이터에서 OkHttp를 사용하여 앱 실행 실패

  26. 26

    UDP 서버에서 패킷을 수신 할 때 별도의 스레드에서 수신해야하는 이유는 무엇입니까?

  27. 27

    JAVA UDP 서버가 패킷을 수신 할 수 없음

  28. 28

    Python에서 UDP의 패킷 손실 시뮬레이션

  29. 29

    UWP WebView-OnScriptNotify 실패에 대한 수신기 이벤트

뜨겁다태그

보관