この記事では、携帯電話で 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()); } }
上記の 2 番目のコード ブロックでは、askService がすぐに開始され (2 番目のパラメーター)、boardCastConfig.getWAIT_MS() ミリ秒ごとに 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"/>
これでコードの受信を完了できます。 2 つのパートが含まれています。
①新しいスレッドを作成します(コードには示していませんが、これは非常に重要です。メインスレッドでネットワーク操作を残した場合、アプリケーションを起動できません)
②マルチキャストロックの取得(このステップは非常に重要です。これがないと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(); }
私の結果:
以上がAndroid で PC から UDP ブロードキャストを受信するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。