Se puede usar C, Java, Pascal, o un lenguaje imperativo inventado, con tal que la sintaxis sea obvia y se entienda el funcionamiento. Podes mirar soluciones de exámenes anteriores para ver ejemplos de código considerado válido.
Lo importante es que uses correctamente la API de sockets (tal como es dada en el curso), y que los programas tengan la estructura correcta (que los servidores sean servidores, los clientes clientes, etc.). Por ejemplo, podes usar una llamada inventada para crear hilos, pero esta llamada tiene que ser "razonable", o sea que tienen que respetar qué es un hilo y qué puede hacer. Las llamadas de la API de sockets ya están dadas, pero puedes "traducirlas" para hacerlas consistentes con el lenguaje que estés usando.
No es un curso de programación ni de ingeniería de software, así que las funcionalidades "avanzadas" de los lenguajes no se valoran. Suelen ser una pérdida de tiempo para los estudiantes.