gpt4 book ai didi

c++ - QTcpSocket 在几次成功连接后发出 "Connection Refused Error"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:00 26 4
gpt4 key购买 nike

我正在设计一个使用 Qt Creator 访问远程桌面的应用程序。为了从远程桌面获取“退出”信号(完成我的目的后),我使用了 Tcpserver 和 Tcpsocket。我的电脑充当服务器,而远程电脑充当客户端。我正在使用以下概念:

服务器电脑1. 按 PushButton 访问远程屏幕(在全屏模式下使用 tightvnc)。2. 启动服务器并监听任何事件连接(我正在使用端口 9876)。3. 找到事件连接。连接到客户端。4.关闭远程访问。5.切换回本地画面。6.服务器关闭

客户端电脑1. 按退出按钮关闭远程访问。2. 当退出按钮被按下时3.连接主机。4.发送“退出”到服务器5.断开主机6. 关闭连接。

几次尝试就可以正常工作(比如 10 次)

但在它开始出现错误“连接被拒绝错误”之后。在我重新启动我的远程电脑之前,我无法从远程访问中恢复。

我试过使用重置,但结果是一样的。

有人知道吗???

这是我的客户端代码

#include "ctrlboardclient.h"
#include <QHostAddress>
#include <QObject>
#include <QtGui/QApplication>
#include <QDebug>


bool CtrlBoardClient::status_flag = false; /* Flag to check the transfer status of Data */


CtrlBoardClient::CtrlBoardClient()
{
connect(&client, SIGNAL(connected()), this, SLOT(startTransfer()));
connect(&client, SIGNAL(readyRead()), this, SLOT(recieve_msg()));
connect(&client, SIGNAL(disconnected()), this, SLOT(disconnectstatus()));
connect(&client, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(getErrorCode(QAbstractSocket::SocketError)));
}


bool CtrlBoardClient::start(QString address, quint16 port)
{
QHostAddress addr(address);
bool rval = client.reset();
qDebug() << "Reset before Connect to Host = " << rval;
client.connectToHost(address, port);

if (!client.waitForConnected(3000)) {
bool rval = client.reset();
qDebug() << "Reset after Connect to Host = " << rval;
qDebug() << "Client is unable to connect to Server ";
return false;
}
qDebug() << "Client Server Connection Successful";
status_flag = false;
return true;
}

void CtrlBoardClient::getErrorCode(QAbstractSocket::SocketError errorCode)
{
qDebug() << "Socket Error = " << errorCode;
}


void CtrlBoardClient::SendMessage(QString Message)
{
status_flag = true;
msg = Message;
startTransfer();
qDebug() << "Message sent to the Server";
client.disconnectFromHost();
while (!client.waitForDisconnected(3000));
qDebug() << "Disconnected from the Host";
return;
}


void CtrlBoardClient::startTransfer()
{
if (status_flag) {
QByteArray block = "";
block.append(msg);
client.write(block);
}

status_flag = false;
return;
}


QByteArray CtrlBoardClient::RecieveMessage()
{
return indata;
}


void CtrlBoardClient::recieve_msg()
{
indata = "";
indata.append(client.readAll());
emit recievemsg();
}


void CtrlBoardClient::disconnectstatus()
{
qDebug() << "Closing Client connection";
CloseClientConnection();
emit connection_aborted();
}


void CtrlBoardClient::CloseClientConnection()
{
bool rval = client.reset();
qDebug() << "Reset after Disconnect from Host = " << rval;
client.close();
}

我的服务器代码是:

#include "mainboardserver.h"

MainBoardServer::MainBoardServer()
{
connect(&mainserver, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
connect(this, SIGNAL(disconnected()), this, SLOT(DisconnectMessage()) );

if (!mainserver.listen(QHostAddress::Any, 9876)) {
emit no_incoming_connection();
}
}

void MainBoardServer::acceptConnection()
{
ctrlclient = mainserver.nextPendingConnection();
connect(ctrlclient, SIGNAL(readyRead()), this, SLOT(startRead()));
connect(ctrlclient, SIGNAL(disconnected()), this, SLOT(DisconnectMessage()));
emit connection_found();
}

void MainBoardServer::startRead()
{
char buffer[1024] = {0};
ClientChat = "";
ctrlclient->read(buffer, ctrlclient->bytesAvailable());
ClientChat.append(buffer);
ctrlclient->close();
emit data_recieved();
}

QString MainBoardServer::RecieveData()
{
return ClientChat;
}

void MainBoardServer::TransferData(QByteArray data)
{
ctrlclient->write(data);
}

void MainBoardServer::DisconnectMessage()
{
emit connection_lost();
}


void MainBoardServer::closeServer()
{
mainserver.close();
emit disconnected();
}

知道如何解决这个问题吗??我犯了什么错误???

最佳答案

我对 Qt 一无所知,但“连接被拒绝”套接字错误意味着两种可能性之一:

1) 根本没有服务器套接字监听目标 IP/端口。

2) 有一个服务器套接字正在监听,但是它积压的未决客户端连接已满,此时无法接受新连接。服务器代码已完全停止调用 accept(),或者调用速度不够快,无法满足尝试连接的客户端数量。

无论哪种方式,客户端都无法知道实际发生的情况。它所能做的就是稍等片刻,然后再次尝试连接。

您需要诊断您的服务器代码,而不是您的客户端代码。您的服务器代码未按您预期的方式运行。

关于c++ - QTcpSocket 在几次成功连接后发出 "Connection Refused Error"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13188824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com