QTcpSocket - 连接被拒绝直到端口更改

时间:2013-11-05 12:32:58

标签: qt sockets tcp qtcpsocket

我道歉,我不知道如何为这个问题提供简明的标题。

后台:我正在使用QTcpSocket连接到PLC模拟器应用程序。以前我使用PLCQTLIB连接到模拟器,一切正常。该库没有为我的项目提供足够的功能,所以我创建了自己的库,用于将Qt与libnodave库连接。

模拟器在IP地址192.168.32.1和端口102上运行

当前问题:我输入IP(192.168.32.1)和端口(102)并按连接。我收到了:

  

TCP错误= QAbstractSocket :: ConnectionRefusedError

     

TCP错误= QAbstractSocket :: SocketTimeoutError

如果我将端口更改为80并按连接,则连接成功。但是,与PLC模拟器的连接将失败,因为它没有侦听端口80.

既然成功连接已建立到192.168.32.1且连接的当前状态 已断开连接,我可以输入正确端口102并成功连接。

问题:为什么TCP套接字在端口80上先前打开连接之后才建立到端口102的连接?不存在防火墙,并且所有通信都在本地计算机上进行。

在标题中声明:

QTcpSocket *tcp;

源文件:

PLCLibNoDave::PLCLibNoDave()
{
    tcp = new QTcpSocket();

    connect(tcp, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
            this, SLOT(tcpStateChanged(QAbstractSocket::SocketState)));
    connect(tcp, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(tcpErrorHandler(QAbstractSocket::SocketError)));
    connect(tcp, SIGNAL(hostFound()), this, SLOT(tcpHostFound()));
    connect(tcp, SIGNAL(connected()), this, SLOT(tcpConnected()));
    connect(tcp, SIGNAL(disconnected()), this, SLOT(tcpDisconnected()));
}

void PLCLibNoDave::connectTCP(int port, QString ip)
{
    tcp->connectToHost(ip,port);
    if(!tcp->waitForConnected(3000)){
        tcp->disconnectFromHost();
        return;
    }
    tcpHandle = tcp->socketDescriptor();
    if(tcpHandle == -1){
        tcp->disconnectFromHost();
        qDebug() << "Invalid Socket Descriptor on Connect";
        return;
    }

    return;
}

void PLCLibNoDave::disconnectTCP()
{
    tcp->disconnectFromHost();

    if(tcp->state() == QAbstractSocket::UnconnectedState ||
            tcp->waitForDisconnected(1000)){
        tcpError = tcp->error();
    }
    else{
        tcpError = tcp->error();
        qDebug() << "Disconnect Failed: " << tcp->errorString();
    }
    return;

}

0 个答案:

没有答案