Я подозреваю, что надо писать в сокет данные в том же формате в каком QT сериализует строки.
Там как минимум должны присутствовать или признак конца строки или ее длинна.
Потом не понятно зачем считывать размер сообщения из сокета, если его туда не писали?
Во всяком случае fputs не пишет в хендл ничего, кроме того, что ему дали.