Rumah >Java >javaTutorial >Terima Siaran UDP daripada PC pada Android
Artikel ini melaksanakan cara menerima siaran UDP daripada PC pada telefon mudah alih anda.
Mari kita selesaikan dahulu pelaksanaan kod di bahagian PC., yang sangat mudah.
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()); } }
Dalam blok kod kedua di atas, askService akan bermula serta-merta(param kedua) dan akan terus melaksanakan fungsi "sendAskMessage()", yang memancarkan paket UDP, setiap milisaat boardCastConfig.getWAIT_MS(). Dalam kod saya, ia berulang setiap 5s.
Kini, anda telah mencapai kejayaan 50%.
Sebelum menulis kod penerimaan kami, kami perlu menambahkan beberapa kebenaran dalam fail AndroidMnifest.xml atau aplikasi anda tidak akan dapat dijalankan.
Berikut adalah kebenarannya:
<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" />
Kemudian mari kita cipta perkhidmatan dalam MainActivity, dan laksanakan kod penerimaan kita di dalamnya. Ngomong-ngomong, jangan lupa menambahkan perkhidmatan ini dalam fail 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"/>
Kemudian kita boleh menyelesaikan kod penerimaan kita. Ia mengandungi dua bahagian.
①buat benang baharu(saya tidak menunjukkannya dalam kod saya, tetapi itu sangat penting, anda tidak boleh memulakan aplikasi anda jika anda meninggalkan operasi rangkaian dalam utas utama)
②mendapatkan kunci multicast(langkah ini amat penting, tanpa ini, anda tidak boleh menerima paket UDP)
③menerima paket 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(); }
Hasil saya:
Atas ialah kandungan terperinci Terima Siaran UDP daripada PC pada Android. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!