Existe alguma classe que permite que 2 programas feitos por mim e que se encontram em 2 computadores diferentes (ambos com acesso a internet) possam interagir entre eles? Por exemplo, eu tenho uma classe que usa a interface keylistener e ao apertar uma tecla ele manda uma mensagem para o outro programa e imprime a tecla apertada.
Opa, da uma olhada no RMI. É exatamente o que você está precisando. http://docs.oracle.com/javase/tutorial/rmi/index.html
Bem mais fácil que com sockets.