QTcpSocket по умолчанию асинхронный, поэтому, когда вы вызываете connectToHost и пишете в том же контексте, он не будет отправлен, так как сокет не подключен.Вы должны изменить свой «клиентский» код:
void TopLevelComms::connect(){
tcpSocket->connectToHost(hostAddress,hostPort,QIODevice::ReadWrite);
if(tcpSocket->waitForConnected()) // putting 1 as parameter isn't reasonable, using default 3000ms value
{
QString string = "Hello";
QByteArray array;
array.append(string);
qDebug()<<tcpSocket->write(array);
}
else
{
qDebug() << "couldn't connect";
}
}
Примечание: вы также не проверяли, можете ли вы слушать
void Comms::attemptConnection(){
connect(server, SIGNAL(newConnection()), this, SLOT(connectionAccepted()));
//socket = server->nextPendingConnection();
if(server->listen(hostAddress,hostPort))
{
qDebug() << "Server listening";
}
else
{
qDebug() << "Couldn't listen to port" << server->serverPort() << ":" << server->errorString();
}
//receivedData = socket->readAll();
}
И последнее.Обратите внимание, что QTcpServer :: nextPendingConnection () возвращает QTcpSocket, поэтому вместо того, чтобы брать это новое соединение, вы создаете новый QTcpSocket с nextPendingConnection в качестве родительского
void Comms::connectionAccepted(){
qDebug()<<"Connected";
// WRONG! it will use QTcpSocket::QTcpSocket(QObject * parent)
//socket = new QTcpSocket(server->nextPendingConnection());
// use simple asign
socket = server->nextPendingConnection();
// move reading to slot
connect(socket, SIGNAL(readyRead()), this, SLOT(readSocket()));
}
, теперь мы переместим чтение в отдельный слот
void Comms::readSocket()
{
// note that dynamic size array is incompatible with some compilers
// we will use Qt data structure for that
//char* rec = new char[socket->readBufferSize()];
qDebug()<<socket->readBufferSize();
// note that QByteArray can be casted to char * and const char *
QByteArray data = socket->readAll();
}
Должен признать, что ошибок много, как для такого небольшого примера кода.Вы должны получить некоторые знания о соединениях TCP / IP.Это потоки, и нет никакой гарантии, что весь блок данных попадет к вам сразу