Permissions
1 2
   | <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
   | 
 
Open socket
1 2 3 4 5 6 7 8 9 10 11 12
   | fun open(port: Int): Boolean {     mPort = port     try {         mSocket = DatagramSocket(port)         mSocket?.broadcast = true         mSocket?.reuseAddress = true         return true     } catch (e: Exception) {         e.printStackTrace()     }     return false }
  | 
 
Close socket
1 2 3 4 5 6
   | fun close(): Boolean {     if (mSocket != null && mSocket?.isClosed?.not() as Boolean) {         mSocket?.close()     }     return true }
  | 
 
Send
1 2 3 4 5 6 7 8 9 10 11 12
   | fun sendPacket(buffer: ByteArray): Boolean {     try {         val packet = DatagramPacket(buffer, buffer.size)         packet.address = InetAddress.getByName("255.255.255.255")         packet.port = mPort         mSocket?.send(packet)         return true     } catch (e: Exception) {         e.printStackTrace()     }     return false }
  | 
 
Receive
1 2 3 4 5 6 7 8 9 10 11
   | fun recvPacket(buffer: ByteArray): Boolean {     val packet = DatagramPacket(buffer, buffer.size)     try {         mSocket?.receive(packet)         println("recv packet ${packet.address} ${packet.data}")         return true     } catch (e: Exception) {         e.printStackTrace()     }     return false }
  | 
 
Reference
Android DatagramSocket Doc