0

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!!!!!!!!!!!!!!!!!";
}
murzagurskiy
  • 1,273
  • 1
  • 20
  • 44
  • You don't show it but I'm assuming there is an active event loop? Try connecting to [`TcpSocket::stateChanged`](http://doc.qt.io/qt-5/qabstractsocket.html#stateChanged) and follow the state changes as they occur. Also -- probably unrelated, but -- why do you call `abort` immediately before trying to connect? – G.M. Jul 23 '17 at 16:55
  • It's from example (i try many examples, nothing work) – murzagurskiy Jul 23 '17 at 17:57
  • @G.M. `FakeTcpClient:: State > QAbstractSocket::HostLookupState FakeTcpClient:: State > QAbstractSocket::ConnectingState` – murzagurskiy Jul 23 '17 at 18:01

0 Answers0