Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C接收UPD广播字节(魔幻WOL数据包)获取目标Mac_C#_Wake On Lan - Fatal编程技术网

C# C接收UPD广播字节(魔幻WOL数据包)获取目标Mac

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 //----------------------

我实现了一个通过广播发送魔法包的功能。 它工作正常,但我希望在一个特殊的服务器上接收所有UDP广播请求。 同样有效。 但是如果我尝试读取字节并将字节转换回十六进制MAC地址,MAC地址将是错误的

使用MAC=001a4d5f84f8将UDP请求发送至:255.255.255.255

特殊服务器成功接收16倍MAC地址,但已更改: 发件人: 001a4d5f84f8 致: 001A4D5F3F

有什么想法吗

我的职能:

//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")))