Bueno julian, y que características piensas que puedan tener esos componentes ???. Yo me imagino uno que haga de servidor, y que tenga un solo método "listen" que dispare un thread que se ponga a la escucha en un puerto para realizar la transferencia, el método listen devuelve el puerto por el que esta escuchando. El cliente por su parte tendrá solo método "send" que envío un fichero a un puerto especifico.
Por ejemplo para realizar una transferencia, el que actúe como servidor ejecutara el método listen y el numero de puerto que le devuelva se lo pasa al cliente, el cliente por su parte usara el método send. Lo que falta es saber como mandara el servidor la información del puerto al cliente, pues si se supone que es un accesorio de un chat, ya debe de existir una conexión entre los dos, así que se puede utilizar esa.
Me da la sensación de que no me he explicado muy bien