The write() method queues the data to be sent and returns immediately. The data is not actually sent, or read, until the program reaches the event loop, which is what you are forcing with waitForReadyRead(). This asynchronous data transmission and reception is a common pattern in Qt: reading results in usually done in response to a readyRead() signal.