From 7ddfd1b048a78a9a580812fab989990bda013b94 Mon Sep 17 00:00:00 2001 From: "bob.pan" Date: Wed, 15 Dec 2021 09:24:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dlibtcp=E4=BC=A0=E8=BE=93?= =?UTF-8?q?=E8=BF=87=E7=A8=8B=E4=B8=AD=E5=9B=A0=E7=BD=91=E7=BB=9C=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=87=BA=E7=8E=B0=E7=9A=84=E5=86=85=E5=AD=98=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=E8=B6=8A=E7=95=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libtcp/common/tcpClientRecv.cpp | 52 +++++++++++++++----------- src/libtcp/common/tcpClientRecv.h | 1 + src/libtcp/common/tcpServerSend.cpp | 2 + src/libtcp/common/tcpServerSend.h | 4 +- src/libtcp/libClient/tpTcpClient.cpp | 9 +++-- src/libtcp/libServer/tpTcpServer.cpp | 10 +++-- tpvs17/tpMain/lpMainWin.cpp | 4 +- tpvs17/valueMainUI/valueMainUI.cpp | 21 ++++++----- tpvs17/valueMainUI/valueMainUI.vcxproj | 3 +- 9 files changed, 63 insertions(+), 43 deletions(-) diff --git a/src/libtcp/common/tcpClientRecv.cpp b/src/libtcp/common/tcpClientRecv.cpp index 4414039..c3b7061 100644 --- a/src/libtcp/common/tcpClientRecv.cpp +++ b/src/libtcp/common/tcpClientRecv.cpp @@ -12,6 +12,8 @@ tcpClientRecv::tcpClientRecv(const QString uuid, QObject *parent /*= 0*/) connect(socket_ptr_, SIGNAL(bytesWritten(qint64)), this, SLOT(on_bytes_written(qint64)), Qt::DirectConnection); connect(socket_ptr_, SIGNAL(disconnected()), this, SLOT(on_disconnected()), Qt::DirectConnection); connect(socket_ptr_, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(on_socket_error(QAbstractSocket::SocketError)), Qt::DirectConnection); + connect(this, SIGNAL(sgStartSession(const QString, const QString&, qint16)), this, SLOT(on_session_start(const QString, const QString&, qint16))); + } tcpClientRecv::~tcpClientRecv() @@ -55,30 +57,27 @@ void tcpClientRecv::set_msg_body(const QJsonObject& msg_body) void tcpClientRecv::on_session_start(const QString uuid, const QString& ip_addr, qint16 port) { - if (uuid_ == uuid) + if (!connect_timeout_timer_) { - if (!connect_timeout_timer_) - { - connect_timeout_timer_ = new QTimer(); - connect_timeout_timer_->setSingleShot(true); - connect_timeout_timer_->setInterval(1500); - connect(connect_timeout_timer_, SIGNAL(timeout()), this, SLOT(on_connect_timeout())); - } - if (!trans_timeout_timer_) - { - trans_timeout_timer_ = new QTimer(); - trans_timeout_timer_->setSingleShot(true); - trans_timeout_timer_->setInterval(2000); - connect(trans_timeout_timer_, SIGNAL(timeout()), this, SLOT(on_transfer_timeout())); - } + connect_timeout_timer_ = new QTimer(); + connect_timeout_timer_->setSingleShot(true); + connect_timeout_timer_->setInterval(1500); + connect(connect_timeout_timer_, SIGNAL(timeout()), this, SLOT(on_connect_timeout())); + } + if (!trans_timeout_timer_) + { + trans_timeout_timer_ = new QTimer(); + trans_timeout_timer_->setSingleShot(true); + trans_timeout_timer_->setInterval(2000); + connect(trans_timeout_timer_, SIGNAL(timeout()), this, SLOT(on_transfer_timeout())); + } + if (uuid_ == uuid) { + if (connect_timeout_timer_) { - if (connect_timeout_timer_) - { - connect_timeout_timer_->stop(); - connect_timeout_timer_->start(); - } - begin(ip_addr, port); + connect_timeout_timer_->stop(); + connect_timeout_timer_->start(); } + begin(ip_addr, port); } } @@ -112,10 +111,14 @@ void tcpClientRecv::on_ready_read() if (current_recv_size_ >= should_recv_size_) return; char* dataPtr = pDataRecv_ + current_recv_size_; + if ((current_recv_size_ + size) > should_recv_size_) + { + size = should_recv_size_ - current_recv_size_; + } if (dataPtr != nullptr) { - memcpy(dataPtr, pDataRecvBuf, size); current_recv_size_ += size; + memcpy(dataPtr, pDataRecvBuf, size); } } if (trans_timeout_timer_) @@ -214,3 +217,8 @@ Q_SLOT void tcpClientRecv::on_transfer_timeout() close(); } + +/* +服务端主动断开时会出现崩溃 异常 +服务端主动关闭时会崩溃 +*/ \ No newline at end of file diff --git a/src/libtcp/common/tcpClientRecv.h b/src/libtcp/common/tcpClientRecv.h index 92ca02f..9f9b29f 100644 --- a/src/libtcp/common/tcpClientRecv.h +++ b/src/libtcp/common/tcpClientRecv.h @@ -23,6 +23,7 @@ public: signals: void signal_data_recv_completed(QString uuid, QSharedPointer, QSharedPointer); void sgException(QString uuid);//异常 或断开连接等操作 + void sgStartSession(const QString uuid, const QString& ip_addr, qint16 port); public slots: virtual void on_session_start(const QString uuid, const QString& ip_addr, qint16 port); virtual void on_connected(); diff --git a/src/libtcp/common/tcpServerSend.cpp b/src/libtcp/common/tcpServerSend.cpp index 4907e9c..f6005e5 100644 --- a/src/libtcp/common/tcpServerSend.cpp +++ b/src/libtcp/common/tcpServerSend.cpp @@ -48,6 +48,7 @@ void tcpServerSend::set_msg_body(const QJsonObject& msgbody) void tcpServerSend::set_bin_data_to_send(const QByteArray& data) {/*初始化要发送数据的相关参数*/ + std::lock_guard guard(m); bin_data_to_send_ = data; bin_data_size_to_send_ = data.size(); bin_data_ptr_ = bin_data_to_send_.data(); @@ -223,6 +224,7 @@ void tcpServerSend::session_established() void tcpServerSend::socket_send() { + std::lock_guard guard(m); int min_package_size = std::min((int)bin_data_size_to_send_ - (int)sent_size_, SOCKET_BUFFER_SIZE); if (min_package_size > 0) { diff --git a/src/libtcp/common/tcpServerSend.h b/src/libtcp/common/tcpServerSend.h index 1f4f2a7..3033d4d 100644 --- a/src/libtcp/common/tcpServerSend.h +++ b/src/libtcp/common/tcpServerSend.h @@ -9,7 +9,7 @@ #include #include #include "../include/libTcp.h" - +#include #ifndef _SOCKET_SIZE_ #define SOCKET_BUFFER_SIZE 4096 #endif @@ -70,6 +70,8 @@ private: QTimer *listen_timeout_timer_{ nullptr }; quint16 curPort_{ 0 }; + + mutable std::mutex m; }; #endif diff --git a/src/libtcp/libClient/tpTcpClient.cpp b/src/libtcp/libClient/tpTcpClient.cpp index c38b538..c1636e9 100644 --- a/src/libtcp/libClient/tpTcpClient.cpp +++ b/src/libtcp/libClient/tpTcpClient.cpp @@ -115,9 +115,9 @@ void TPTcpClient::createChildRevSocket(int socketNum) data_sess_ptr->moveToThread(thread_ptr); connect(thread_ptr, &QThread::finished, data_sess_ptr, &QObject::deleteLater); - connect(data_sess_ptr, &tcpClientRecv::signal_data_recv_completed, this, &TPTcpClient::on_data_recv_completed/*, Qt::QueuedConnection*/); - connect(this, &TPTcpClient::signal_session_start, data_sess_ptr, &tcpClientRecv::on_session_start/*, Qt::QueuedConnection*/); - connect(data_sess_ptr, &tcpClientRecv::sgException, this, &TPTcpClient::on_data_recv_close/*, Qt::QueuedConnection*/); + connect(data_sess_ptr, &tcpClientRecv::signal_data_recv_completed, this, &TPTcpClient::on_data_recv_completed, Qt::QueuedConnection); + connect(this, &TPTcpClient::signal_session_start, data_sess_ptr, &tcpClientRecv::on_session_start, Qt::QueuedConnection); + connect(data_sess_ptr, &tcpClientRecv::sgException, this, &TPTcpClient::on_data_recv_close, Qt::QueuedConnection); data_sessions_[strUuid] = thread_ptr; m_childRevSocket_Map[strUuid] = QPair(false, data_sess_ptr); thread_ptr->start(); @@ -330,7 +330,8 @@ void TPTcpClient::on_msg_received() QString strUuid = pClient->getUuid(); //qDebug() << "curUUId:" << strUuid<<" port:"<set_msg_body(msg_ptr->body); - emit signal_session_start(strUuid, host_ip_, nport); + emit pClient->sgStartSession(strUuid, host_ip_, nport); + //emit signal_session_start(strUuid, host_ip_, nport); setRevSocketisBusy(strUuid, true); } } diff --git a/src/libtcp/libServer/tpTcpServer.cpp b/src/libtcp/libServer/tpTcpServer.cpp index 3568116..170bae2 100644 --- a/src/libtcp/libServer/tpTcpServer.cpp +++ b/src/libtcp/libServer/tpTcpServer.cpp @@ -380,11 +380,15 @@ void TPTcpServer::on_disconnected(int sessID) } } - for (QMap::iterator it = m_ClientSendPairMap.begin(); it != m_ClientSendPairMap.end(); ++it) { - (*it).first = false; + std::lock_guard guard(m); + for (QMap::iterator it = m_ClientSendPairMap.begin(); it != m_ClientSendPairMap.end(); ++it) + { + (*it).first = false; + } } -} + } + void TPTcpServer::refuse_data_request(const QString& strClient, const QString& strReason) { diff --git a/tpvs17/tpMain/lpMainWin.cpp b/tpvs17/tpMain/lpMainWin.cpp index e27f976..b4aedf8 100644 --- a/tpvs17/tpMain/lpMainWin.cpp +++ b/tpvs17/tpMain/lpMainWin.cpp @@ -22,9 +22,9 @@ #include "databasesql.h" #include "lpCryptokey.h" -#define VERSION_HUB "3.0.3.3" +#define VERSION_HUB "3.0.4.0" #define VERSION_ALG "3.0.1.4" -#define UPDATE_TIME "2021-12-10" +#define UPDATE_TIME "2021-12-15" #pragma execution_character_set("utf-8") #define MODEL_UI_ICON_NONE ":/image/no-img" diff --git a/tpvs17/valueMainUI/valueMainUI.cpp b/tpvs17/valueMainUI/valueMainUI.cpp index ea6217d..63f3f21 100644 --- a/tpvs17/valueMainUI/valueMainUI.cpp +++ b/tpvs17/valueMainUI/valueMainUI.cpp @@ -29,7 +29,7 @@ valueMainUI::valueMainUI(QWidget *parent) setupTrayIcon();//鍚庡彴浠诲姟鏍忓垵濮嬪寲 setWindowIcon(QIcon(WINDOWICON)); - setWindowTitle(tr("璇嗗埆瀹氫綅涓浣撴娴嬬郴缁(v1.1.0 21.12.13)")); + setWindowTitle(tr("璇嗗埆瀹氫綅涓浣撴娴嬬郴缁(v1.3.0 21.12.15)")); lpGlobalData::instance(); lpConfig::instance()->loadConfig(); @@ -572,17 +572,18 @@ void valueMainUI::timerEvent(QTimerEvent *event) ui.textEdit->append(tr("杩炴帴瓒呮椂锛屽皾璇曢噸鏂拌繛鎺ユ娴嬭蒋浠")); } - - if (m_CoutB > 15) + if (lpConfig::instance()->doubleStation == true) { - m_bServerB = false; - m_CoutB = 0; - onConnectB(); - if (ui.textEdit_2->toPlainText().size() > 10000) - ui.textEdit_2->clear(); - ui.textEdit_2->append(tr("杩炴帴瓒呮椂锛屽皾璇曢噸鏂拌繛鎺ユ娴嬭蒋浠")); + if (m_CoutB > 15) + { + m_bServerB = false; + m_CoutB = 0; + onConnectB(); + if (ui.textEdit_2->toPlainText().size() > 10000) + ui.textEdit_2->clear(); + ui.textEdit_2->append(tr("杩炴帴瓒呮椂锛屽皾璇曢噸鏂拌繛鎺ユ娴嬭蒋浠")); + } } - { if (m_bServerA == true) { diff --git a/tpvs17/valueMainUI/valueMainUI.vcxproj b/tpvs17/valueMainUI/valueMainUI.vcxproj index 2ffeec5..a9f6b2d 100644 --- a/tpvs17/valueMainUI/valueMainUI.vcxproj +++ b/tpvs17/valueMainUI/valueMainUI.vcxproj @@ -88,9 +88,10 @@ true UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WEBSOCKETS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\src\tpMain;.\..\..\tpvs17\tpMain\lpRawTcp;.\..\..\src\libtcp\common;.\..\..\src\libtcp\include;.\..\..\src\libtcp\libClient;%(AdditionalIncludeDirectories) - + ProgramDatabase MultiThreadedDLL true + Disabled Windows