UDP 패킷의 처음 5 바이트를 두 개의 정의와 비교해야하며 일치하는 경우 그에 따라 작동해야합니다. 그러나 이것이 분명히 작동하지 않을 것이기 때문에 어떻게 이것을 표현해야합니까?바이트를 16 진수로 비교 하시겠습니까?
주석 처리 된 줄은 내가 원래하는 방식이지만 매우 효율적이지는 않습니다.
private static void HandleQuery(Socket socket, EndPoint Remote)
{
byte[] A2S_INFO_REQUEST = StringToByteArray("\xFF\xFF\xFF\xFF\x54");
byte[] A2S_PLAYER = StringToByteArray("\xFF\xFF\xFF\xFF\x55");
byte[] data = new byte[1400];
int recv = socket.ReceiveFrom(data, ref Remote);
// A2S_INFO QUERY
//if (recv == 25 && data[4] == 84)
if (CompareByteArray(A2S_INFO_REQUEST, data, 5))
{
ReplyInfoQuery(socket, Remote);
}
// A2S_PLAYER QUERY
//if (recv == 9)
if (CompareByteArray(A2S_PLAYER, data, 5))
{
ReplyPlayerQuery(socket, Remote);
}
}
private static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars/2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i/2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
private static bool CompareByteArray(byte[] a1, byte[] a2, int len)
{
for (int i = 0; i < len; i++)
{
if (a1[i] != a2[i])
{
return false;
}
}
return true;
}
우선, 다음과 같이 배열을 만드는 것이 어떻습니까? 'new byte [] {0xFF, 0xFF, 0xFF, 0x54}' –