全くwriteされない、もしくは意図していたのと違うパケットがtcpでwriteされてしまった場合、デフォルトで有効になっているNagleのアルゴリズムが原因かもしれません。
できるだけまとめて送られてしまうので、逐次的にwriteしたい場合などはsocket->waitForBytesWritten();をwriteの後に書くと正しい挙動になってくれます。
例
socket->write("hoge"); socket->waitForBytesWritten();
QAbstractSocket::LowDelayOptionでNagleを無効にできると公式ページでは書いてありますが、少なくとも私の環境では無理でした。