I don't understand, what it isn't clear to you?

Do not use waitForXX methods, and for:

* reading - just use an readyRead() signal -> bytesAvailable(), if need -> read()
* writing - just use write() -> bytesWritten() singal, if need
* for waiting response - just use an QTimer to detect a wait timeout

1. write()
2. run a wait timer
3. handle or readyRead() or timeout() signal

.. what is problems?