I write my TcpServer on Windows 7. Qt 5.7
The server works fine, when i connect with Telnet to 127.0.0.1
and port 4545
TcpServer:
_dataChannel = new QTcpServer(this);
connect(_dataChannel, QTcpServer::newConnection, this, &TCPTransfer::startDataSession);
if(!_dataChannel->listen(QHostAddress::Any, _dataPort))
{
throw TCPException(QString("Can't start listen on %1").arg(_dataPort));
}
qDebug() << "TcpTransfer:: Data channel was start at " << _dataChannel->serverAddress() << " : " << _dataChannel->serverPort();
//...
void TCPTransfer::startDataSession()
{
_dataSocket = _dataChannel->nextPendingConnection();
qDebug() << "TcpTransfer:: Data socket was created";
if(!_dataSocket->open(QIODevice::ReadWrite))
{
emit TCPException("Can't open data socket for Read/Write");
return;
}
qDebug() << "TcpTransfer:: Data socket was opened";
connect(_dataSocket, &QTcpSocket::disconnected, _dataSocket, &QTcpSocket::deleteLater);
connect(_dataSocket, &QTcpSocket::readyRead, this, &TCPTransfer::receiveData);
}
//...
void TCPTransfer::receiveData()
{
QByteArray data;
while(_dataSocket->bytesAvailable() > 0)
{
data.append(_dataSocket->readAll());
if(data.isEmpty())
{
emit ErrorOccurred("Can't read TCP buffer");
return;
}
}
qDebug() << "TcpTransfer:: Data received: " << data;
emit newTCPData(data);
}
But when i try to connect from test method (#include <QTest>
all running tests are private slots
in class TestTcpServer
) to server connection is never chane from QAbstractSocket::ConnectingState
to QAbstractSocketConnectedState
and connected()
signal is never emits.
I don't know, is this because of slot, or because of test, or whatever!
TcpClient code:
//...
_dataSocket = new QTcpSocket(this);
connect(_dataSocket, &QTcpSocket::readyRead, this, &FakeTcpClient::ReadDataFromDataSocket);
connect(_dataSocket, &QTcpSocket::connected, this, &FakeTcpClient::ConnectedSuccessfull);
_dataSocket->abort();
_dataSocket->connectToHost("127.0.0.1", 4545);
//...
void FakeTcpClient::ReadDataFromDataSocket()
{
qDebug() << "FakeTcpClient:: Recv data from Data > " << "...";
}
void FakeTcpClient::ConnectedSuccessfull()
{
qDebug() << "FakeTcpClient:: CONNECTED!!!!!!!!!!!!!!!!!";
}