TCP Connect Fake после перезапуска приложения [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 TCP Connect Fake после перезапуска приложения [закрыто]

Сообщение Anonymous »

У меня есть набор из трех потоков, скажем, a, b, c. < /p>
Поток A создает данные и отправляет адрес в потоку B через сигнал QT и слоты. Б.

Код: Выделить всё

void SCANSAVER::onReadyRead()
{
QByteArray data = socket->readAll();
controlBuffer.append(data);

// Process control messages line by line (terminated by '\n')
int newlineIndex;
while ((newlineIndex = controlBuffer.indexOf('\n')) >= 0) {
QByteArray line = controlBuffer.left(newlineIndex);
controlBuffer.remove(0, newlineIndex + 1);

QString str = QString::fromUtf8(line).trimmed();
if (str.startsWith("PATH:")) {
QStringList parts = str.split(';');
for (const QString &part : parts) {
if (part.startsWith("PATH:")) {
m_basePath = part.mid(5).trimmed();
qDebug() state() == QAbstractSocket::ConnectedState) {
socket->disconnectFromHost();
if (socket->state() != QAbstractSocket::UnconnectedState) {
bool disconnected = socket->waitForDisconnected(3000); // Increased timeout
if (!disconnected) {
socket->abort(); // Force close if graceful disconnect fails
}
}
} else if (socket->state() != QAbstractSocket::UnconnectedState) {
socket->abort(); // Force close for any non-disconnected state
}

socket->close();
socket->deleteLater();
socket = nullptr;
}

if (server) {
server->close();
server->deleteLater();
server = nullptr;
}
}

Thread B code
PROCESSFRAME::PROCESSFRAME(QObject *parent)
: QThread{parent}, image(3072, line_in_projection, QImage::Format_Grayscale16), currentLine(0)
{
socket = new QTcpSocket(this);
retryTimer = new QTimer(this);
retryTimer->setInterval(500);  // retry every 500 ms
retryTimer->setSingleShot(true);

connect(socket, &QTcpSocket::connected, [](){
qDebug() state() == QAbstractSocket::ConnectedState ||
socket->state() == QAbstractSocket::ConnectingState)
return; // already connected or connecting

socket->abort();  // cancel any previous attempt
socket->connectToHost(QHostAddress::LocalHost, 12345);

if (!socket->waitForConnected(100)) { // non-blocking short wait
qWarning() start();
}
}

void PROCESSFRAME::SendSavePath(QString path, int dualEnergy)
{
if (socket->state() == QAbstractSocket::ConnectedState) {
QByteArray msg = "PATH:" + path.toUtf8() + ";DUAL:" + QByteArray::number(dualEnergy) + "\n";
socket->write(msg);
socket->flush();
qDebug() write(msg);
socket->flush();
qDebug() 

Подробнее здесь: [url]https://stackoverflow.com/questions/79754019/tcp-connect-failing-after-restarting-application[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»