I think you're going to need several books to cover all of these topics.
For multi-threading, Programming with POSIX Threads by David Butenhof is very good. Like the title says, it focuses on the POSIX API, but much of the book is applicable to threading in general. Doug Lea's Concurrent Programming in Java is also first-class and not too specific to Java. Both of these are very densely packed with information, and require effort to go through but it's well worth it.
In XML, I don't really have experience with using C or C++, only Java. There I have usually gone with books published by O'Reilly, as XML is more practical and suited to their style of books. Java and XML I recall as being quite good, and it will give an overview of both SAX and DOM. (But anyway, the answer to the question of whether to use SAX or DOM is: Almost always use SAX, and use DOM only if you need to represent XML as XML in memory and you don't have any other model available. DOM really is horrible.) And in the case of XML, you can also find good articles on the Web.
For distributed programming, which client-server is a part of, one good book is Pattern-Oriented Software Architecture volume 2: Patterns for Concurrent and Networked Objects by Douglas Schmidt et al. It is a design pattern book, covering different designs for distributed systems and when you would use each one.
Can't help with databases, haven't mucked around with them enough. And if you have any other topics, I recommend the same approach: get a separate book for each topic, you'll get a lot more and much better information that way.