Yes, it's possible. There is a good Sockets tutorial in one of the threads around here. Somebody will give us a link Real Soon Now.
As for basics, you'll need a client program and a server program. The server program will start first and open a ServerSocket on a port. The client will open a regular Socket connecting to the server machine's address and the same port. When a client connects, the ServerSocket on the server gives out a new Socket for communication with the client. If you have multiple clients - usually something you have to allow for - look into the server program starting a new
thread each time a client connection happens.
Once you're connected, both ends get the input and output streams from their respective sockets. To send a file, the client writes file bytes and the server reads them and writes them to disk. To receive a file, the the server reads file bytes from disk and writes them back to the client. Think about a few bytes sent from client to server to identify the scenario, like "I'm about to send file xxx" or "please send me file zzz".
I hope that gives you enough to start fiddling with. As you get bits of this running (or not) please post code snippets & questions!