53 lines
1.3 KiB
C#
53 lines
1.3 KiB
C#
|
using System.Net;
|
||
|
using System.Net.Sockets;
|
||
|
|
||
|
namespace DemoAndroid;
|
||
|
|
||
|
[Activity(Label = "WakeOnLanActivity")]
|
||
|
public class WakeOnLanActivity : Activity
|
||
|
{
|
||
|
protected override void OnCreate(Bundle? savedInstanceState)
|
||
|
{
|
||
|
base.OnCreate(savedInstanceState);
|
||
|
|
||
|
// Create your application here
|
||
|
SetContentView(Resource.Layout.activity_wakeonlan);
|
||
|
|
||
|
var button = FindViewById<Button>(Resource.Id.btnWakeOnLan);
|
||
|
button.Click += (sender, args) =>
|
||
|
{
|
||
|
WakePc();
|
||
|
};
|
||
|
}
|
||
|
|
||
|
private void WakePc()
|
||
|
{
|
||
|
byte[] macAddress = { 0x2c, 0x4d, 0x54, 0x4d, 0x10, 0x0f };
|
||
|
byte[] magicPacket = new byte[102];
|
||
|
|
||
|
// Fill first 6 bytes with 0xFF
|
||
|
for (int i = 0; i < 6; i++)
|
||
|
{
|
||
|
magicPacket[i] = 0xFF;
|
||
|
}
|
||
|
|
||
|
// Repeat MAC address 16 times
|
||
|
for (int i = 1; i <= 16; i++)
|
||
|
{
|
||
|
for (int j = 0; j < 6; j++)
|
||
|
{
|
||
|
magicPacket[i * 6 + j] = macAddress[j];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
using var client = new UdpClient();
|
||
|
client.EnableBroadcast = true;
|
||
|
var endpoint = new IPEndPoint(IPAddress.Broadcast, 9); // 255.255.255.255 port 9
|
||
|
|
||
|
for (int i = 0; i < 5; i++)
|
||
|
{
|
||
|
// Try 5 times
|
||
|
client.Send(magicPacket, magicPacket.Length, endpoint);
|
||
|
}
|
||
|
}
|
||
|
}
|