Här har du en fungerande kod, dock är den kanske inte omptimal då det var ett tag sedan jag arbetade med den. Hoppas den kan hjälpa!
byte[] cmd = { 255, 255, 255, 255, 105, 110, 102, 111, 0 };
System.Text.ASCIIEncoding encode = new System.Text.ASCIIEncoding();
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000);
socket.Connect(new IPEndPoint(Dns.Resolve(hostname).AddressList[0], port));
socket.Send(cmd);
byte[] buffer = new Byte[1024];
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
bool done = true;
while(done)
{
int pos, offset;
socket.Receive(buffer);
socket.Close();
pos = 5;
offset = 6;
while (buffer[offset] != 0) offset++;
_name = encode.GetString(buffer, pos, offset-pos);
pos = offset;
offset++;
while (buffer[offset] != 0) offset++;
_map = encode.GetString(buffer, pos, offset-pos);
pos = offset;
offset++;
while (buffer[offset] != 0) offset++;
// game
pos = offset;
offset++;
while (buffer[offset] != 0) offset++;
_game = encode.GetString(buffer, pos, offset-pos);
pos = offset;
offset++;
while (buffer[offset] != 0) offset++;
pos++;
_cplayers = Int32.Parse(buffer[pos].ToString());
_mplayers = Int32.Parse(buffer[pos+1].ToString());
done = false;
}