Con le socket puoi far viaggiare byte.
I file sono byte.
I file xml serializzati sono anch'essi byte.
quindi possono viaggiare attraverso le socket.

Riguardo al fatto che un applicazione puo ricevere file da più applicazioni lì devi far uso dei thread.

Riguardo la deserializzazione, bisogna capire che genere di api usi per l'xml e relativa serializzazione.