The server PC has multiple user profiles and is currently logged in to the "wrong" user from the one that you used to set up the vnc connection.
I haven't found a "good" answer, but one person claims that you can disable fast user switchig, and then set up the server under each user to listen on a different port number (log in as usera, set the server to display1, log in as userb, set the server to disply 2, etc... for all users)
then, in the server pc's router where you are currently forwarding port 5900 to their pc, forward the ports for all displays you set up (say, 5900-5905)
after that, there will be a display for each user and all will be black except for the currently active user, if any.
from then on, then from your end in the client you enter not just the ip but the ip and one of the display numbers until you find the one that isn't black, and you'll have to try them all each time you connect since you never know who's using the server pc.
ip:1 or ip:5901 -> usera, black screen, try next...
ip:2 or ip:5902 -> userb, maybe live screen...
I haven't tried this out.
I do know I've used vnc to connect to the login screen of an xp machine before and then select a user and log in as if I were at the pc, but maybe it only worked because I chose the "right" user.
And I have definitely seen the black screen lot's of times and the answer was always to call the remote user up and have them log out all users or all users but the "right" user.
"fast user switching" allows more than one users programs and to stay active in the background at the same time and I have seen it cause problems with many programs that try to launch at start-up and set up a service on a tcp port. Only one process can occupy a given tcp port on the same machine at a time, meaning if usera logs in, and their start-up sets up a server listening on 5900, then uses fast user switching to switch from usera to userb, that process of usera's that's listening on 5900 stays alive still occupying that port. When userb's profile tries to start up the same program, it fails because it can't aquire port 5900. In the case of vncserver, it's easy to have userb's vncserver use some other port that's free, like 5901. But many other programs are not so flexible and all you get is a train wreck.
Unless you disable fast user switching. In that case when usera logs out, all their programs close, meaning when userb logs in, he can use all the same programs and all the same tcp ports.
Hmm, I think I just deduced from above that if you merely disable fast user switching, you shouldn't even have to set up the different display numbers, the one port will work. The different display numbers scheme would be a way to _allow you to keep_ fast user switching, not that it would be even remotely worth the effort for the miniscule gain of having user login/logout go slightly slightly faster...