I think you confused with DHCP Server-Client and Application Server-Client. Hope below wiki provide a little explanation
http://en.wikipedia.org/wiki/Client%E2%80%93server_modelIf keep using your current architecture. Your major issue is only "How Arduino knows PC IP address is?" when PC is varying.
My suggestion is to implement Arduino in "Server" mode. Seek for Ethernet "Server" class on Arduino API, you should have a clue on what may be. Hope this help.
Yeah! i am confused little bit, initially i had to make my Arduino Ethernet Shield as Client and my PC as server, with direct connection it works fine.
But when they both are connected to router, then it PC and Ethernet Shield is working as client for Router.
I can't implement my Arduino Ethernet Shield as Server, as the project i am doing is very big and it will be a mess to setup my Arduino as server.
I just have to keep IP address of my PC as static.