Почему после чтения key ожидается три числа, а parseInt делается только один раз? Три раза подряд и надо. В три различные переменные (val0, val1, val2) или в три элемента массива (val[0], val[1], val[2]). Их же наверное не только напечатать надо, но и как-то ещё использовать?
Но это решение для идеальных условий. На первое время его может и хватит. Но обычно, когда нужно передавать нечто большее, чем однобайтовые команды, пора "изобретать" пакетную передачу, некий свой протокол.