C# C接收UPD广播字节(魔幻WOL数据包)获取目标Mac
我实现了一个通过广播发送魔法包的功能。 它工作正常,但我希望在一个特殊的服务器上接收所有UDP广播请求。 同样有效。 但是如果我尝试读取字节并将字节转换回十六进制MAC地址,MAC地址将是错误的 使用MAC=001a4d5f84f8将UDP请求发送至:255.255.255.255 特殊服务器成功接收16倍MAC地址,但已更改: 发件人: 001a4d5f84f8 致: 001A4D5F3F 有什么想法吗 我的职能:C# C接收UPD广播字节(魔幻WOL数据包)获取目标Mac,c#,wake-on-lan,C#,Wake On Lan,我实现了一个通过广播发送魔法包的功能。 它工作正常,但我希望在一个特殊的服务器上接收所有UDP广播请求。 同样有效。 但是如果我尝试读取字节并将字节转换回十六进制MAC地址,MAC地址将是错误的 使用MAC=001a4d5f84f8将UDP请求发送至:255.255.255.255 特殊服务器成功接收16倍MAC地址,但已更改: 发件人: 001a4d5f84f8 致: 001A4D5F3F 有什么想法吗 我的职能: //Send Packets //----------------------
//Send Packets
//------------------------------------------------------
string MAC_ADDRESS = "001a4d5f84f8";
UdpClient UDP = new UdpClient();
try
{
IPAddress IPBCast = IPAddress.Parse("255.255.255.255");
UDP.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
int offset = 0;
byte[] buffer = new byte[512];
//first 6 bytes should be 0xFF
for (int y = 0; y < 6; y++)
buffer[offset++] = 0xFF;
//now repeate MAC 16 times
for (int y = 0; y < 16; y++)
{
int i = 0;
for (int z = 0; z < 6; z++)
{
buffer[offset++] =
byte.Parse(MAC_ADDRESS.Substring(i, 2), NumberStyles.HexNumber);
i += 2;
}
}
UDP.EnableBroadcast = true;
UDP.Send(buffer, 512, new IPEndPoint(IPBCast, 0x1));
}
catch (Exception ex1)
{
MessageBox.Show(ex1.Message);
UDP.Close();
}
您的问题是Encoding.ASCII.GetString。它可以读取使用ASCII编码的字符串,但这不是您要发送的内容。您必须将字节解码为字节
如果希望结果为字符串,可以使用
string.Join("", bytes.Select(b => b.ToString("x2")))
这里,字节是要转换为字符串的字节序列
如果您不在.Net 4上,则需要在选择后添加.ToArray。谢谢svick,这正是我要找的。mac结果是正确的。非常感谢你。
//Convert Received String To Hex
//------------------------------------------------------
public static string StringToHex(string hexstring)
{
var sb = new StringBuilder();
foreach (char t in hexstring)
sb.Append(Convert.ToInt32(t).ToString("x") + " ");
return sb.ToString();
}
string.Join("", bytes.Select(b => b.ToString("x2")))