Los sockets son la base, de más bajo nivel.
Corba es algo construido por encima y de más alto nivel.
Casi todos los lenguajes de programación tienen sockets. El comunicar lenguajes distintos entre si entre máquinas distintas con sockets te puede dar problemas que tienes que solucionarte tú mismo (ordenamiento de bytes en los enteros, maquinas de 16 bits contra máquinas de 32, representación interna de floats distinta, etc).
Corba, al menos antes, era de pago. Si tienes corba en ambas maquinas, se te solucionan todos los problemas de lenguaje, bytes, maquinas, etc. La pega es que posiblemente es más lento que usar sockets directamente.
Se bueno.