Short answer: Gnutella user can only download from others as long as one of both can handle "incoming connections". If both can't (both behind firewalls or masquerading-routers), upload does not work.
One solution is port forwarding into your LAN (e.g. TCP 6346, I think that is what you have done above?), but it does only work with an forceIP option (which Xolox does _NOT_ provide yet, many other gnutella clients do, e.g Limewire, Phex or Bearshare). Another solution is using a socks proxy (which Xolox DOES support). A third solution is using a gnutella-proxy or gnutella-masquerading-module (which is not available yet, see
here). A fourth solution is for geeks only, tunneling gnutella traffic through another protocoll and host (but this is definitely more computer geek stuff, they know what to do).
Long answer: Gnutella download is Peer2Peer, so the restriction descibed above is a limitation due to TCP/IP protocoll... or to be more specific because of blocking firewalls or IP-masquerading/NAT-routers which can't handle incoming traffic without specifc modules. If you're interested in technical details, please read gnutella documents/specification about Pushrequest and Pushroutes + (Linux) Networking Howto.
Sorry, I won't describe it here, it would take too long (see
here if you can understand german, it's a detailed description which I may translate next weeks).
Hope it helps, Moak