Random remarks from the internet:
People complain. It's human nature. Things take as long as they take and that's almost always longer than people think they should. At its heart, this is a scheduling problem and scheduling problems are in NP. All you can do is move the project forward when there is an opportunity.
Random advice from the internet:
Prepare a Project Status Memo for Friday. Without arguing or being an asshole, describe the technical status of the project's critical path. Describe the technical status of each non-critical path. List pending deliverables by the you the consultant and by the client.
Read it again tomorrow morning, Thursday morning. Edit the tone to remove any arguments and asshole tone. Repeat Thursday afternoon. Repeat Friday morning until the Project Status Memo is utterly and entirely boring. This may be really hard. Send it before Friday lunch.
Next week, on your regular schedule, move the project forward in areas that are not blocked to the best of your ability. Maybe everything is on the critical path. Usually it isn't. Maybe the client has responded, maybe the client hasn't. Life happens. That's the nature of scheduling problems. Next Wednesday start writing another Project Status Memo using the same process. Next Thursday, all the client let them know that you are "updating the project status, and do they have anything for it."
Random discussion from the internet:
Generally, put things that you are waiting for on the back burner and work on something else whether it is other projects or developing other clients. You have a dependency on your client's schedule and all the schedules of everyone who your client has taken a dependency. Some of those dependencies may have a dependency on your work (deadlock), some of those dependencies are competing with you for the client's attention (race condition).
That's scheduling problems...except that when they are sequence dependent they're not just in HP, they are NP-hard [1]. Accepting the mathematics intuitively or intellectually is part of what makes some people's attitude toward project management different from others. It is as it is and getting angry is not an unusual reaction. Realizing that the anger is no more justified than anger about gravity is a good guide for behavior.
Firing a client:
Client and project selection are important. Good clients have interesting projects and checks that don't bounce. Good client relations happen over time. Both parties need to learn how to play well together and communicate effectively when they are not playing as well together as might be hoped. Like all long term relationships consultants and clients have to accept oneanother's shortcomings and idiosyncrasies and value the relationship over the frustrations these cause.
Last piece of random advice:
As a consultant, it is always worth asking what happened to the last consultant that was doing this sort of work for this person? Why isn't this potential client some other consultant's repeat client? Why is this potential client contacting me?
One of the red flags is the client that wants bad terms in exchange for promising lots of future work. A variation is "this will look good in your portfolio." Another is, "Give me a discount and I will tell all my friends about you." One bad project is bad enough. Lots of them is worse.
Good luck.
[1]: https://en.wikipedia.org/wiki/Job_shop_scheduling#NP-hardnes...