>Java >java지도 시간 >Android의 PC에서 UDP 브로드캐스트 수신

Android의 PC에서 UDP 브로드캐스트 수신

Susan Sarandon
Susan Sarandon원래의
2025-01-02 19:27:38847검색

이 글에서는 PC에서 휴대폰으로 UDP 브로드캐스트를 수신하는 방법을 구현합니다.
먼저 PC측에서 코드 구현을 완료해 보겠습니다. 매우 간단합니다.

private final ScheduledExecutorService askService= Executors.newSingleThreadScheduledExecutor();
public void runWaitConnectThead(){
        askService.scheduleAtFixedRate(this::sendAskMessage, 0, boardCastConfig.getWAIT_MS(), TimeUnit.MILLISECONDS);
    }
protected void sendAskMessage(){
        byte[] message = this.hostName.getBytes();
        try (DatagramSocket datagramSocket = new DatagramSocket()) {
            datagramSocket.setBroadcast(true);
            InetAddress boardcastAddr = InetAddress.getByName("255.255.255.255");
            DatagramPacket datagramPacket = new DatagramPacket(message, message.length, boardcastAddr, 1885);
            datagramSocket.send(datagramPacket);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }

위의 두 번째 코드 블록에서 AskService는 즉시 시작되고(두 번째 매개변수) 밀리초마다 UDP 패킷을 보드캐스트하는 "sendAskMessage()" 함수를 계속 실행합니다. 내 코드에서는 5초마다 반복됩니다.

이제 50%의 성공을 이루셨습니다.
수신 코드를 작성하기 전에 AndroidMnifest.xml 파일에 일부 권한을 추가해야 합니다. 그렇지 않으면 애플리케이션이 실행될 수 없습니다.
권한은 다음과 같습니다.

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

그런 다음 MainActivity에서 서비스를 만들고 여기에 수신 코드를 구현해 보겠습니다. 그런데 AndroidManifest.xml 파일에 이 서비스를 추가하는 것을 잊지 마세요.

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent waitBoardCastService=new Intent(this, WaitBoardCastService.class);
        startService(waitBoardCastService);
    }
}
<service android:name=".on_wait.WaitBoardCastService"/>

이제 수신 코드를 완료할 수 있습니다. 두 부분으로 구성되어 있습니다.
①새 스레드 생성(내 코드에는 표시하지 않았지만 매우 중요합니다. 메인 스레드에서 네트워크 작업을 종료하면 애플리케이션을 시작할 수 없습니다)
②멀티캐스트 잠금 획득(이 단계는 매우 중요하며, 이것이 없으면 UDP 패킷을 받을 수 없습니다)
③UDP 패킷 수신

WifiManager wifi =(WifiManager)getSystemService(MyApplication.WIFI_SERVICE);
WifiManager.MulticastLock lock = wifi.createMulticastLock("any_tag");
lock.acquire();
try {
    DatagramSocket socket = new DatagramSocket(1885);
    byte[] receiveData = new byte[1024];
    DatagramPacket receivePacket = new DatagramPacket(receiveData, 
    receiveData.length);
    Log.v("hello","waiting");
    socket.receive(receivePacket);
    String receiveMessage = new String(receivePacket.getData(), 0,receivePacket.getLength());
    Log.v("hello","received!");
    socket.close();
} catch (IOException e) {
    Toast.makeText(MyApplication.getContext(), "NetWork Error",Toast.LENGTH_LONG).show();
} finally {
    lock.release();
}

내 결과:

Receive UDP Broadcast from PC on Android

위 내용은 Android의 PC에서 UDP 브로드캐스트 수신의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.