Can you ping your friend's PC by it's host name and visa versa? If so you can connect using that instead of IP addresses.
Example:
When I connect to the internet (dialup), I can ping my machine but using my login name and my ISP's DNS name. So if I ping myPC.domain.com, I get a reply. I can also type
http://myPC.domain.com and view the webpages on my PC.
So you could ssh myPC.domain.com or ftp:myPC.domain.com. I don't know if all ISP's add there users names or not. I tried this with my dad's PC and it did not work.
You could also use something like dyndns.org and forward the request to the PC's. If your ISP offers free webspace, you could put the files on a share and share them that way too.