libtcp更新

master
bob.pan 4 years ago
parent 7ddfd1b048
commit 18fd459204

@ -110,11 +110,12 @@ void tcpClientRecv::on_ready_read()
{ {
if (current_recv_size_ >= should_recv_size_) if (current_recv_size_ >= should_recv_size_)
return; return;
char* dataPtr = pDataRecv_ + current_recv_size_;
if ((current_recv_size_ + size) > should_recv_size_) if ((current_recv_size_ + size) > should_recv_size_)
{ {
size = should_recv_size_ - current_recv_size_; size = should_recv_size_ - current_recv_size_;
} }
char* dataPtr = pDataRecv_ + current_recv_size_;
if (dataPtr != nullptr) if (dataPtr != nullptr)
{ {
current_recv_size_ += size; current_recv_size_ += size;

@ -12,6 +12,7 @@ tcpServerSend::tcpServerSend(qint64 sessID, QObject *parent)
connect(server_listener_ptr_, SIGNAL(newConnection()), this, SLOT(on_new_connection())); connect(server_listener_ptr_, SIGNAL(newConnection()), this, SLOT(on_new_connection()));
connect(listen_timeout_timer_, SIGNAL(timeout()), this, SLOT(on_listen_timeout())); connect(listen_timeout_timer_, SIGNAL(timeout()), this, SLOT(on_listen_timeout()));
connect(trans_timeout_timer_, SIGNAL(timeout()), this, SLOT(on_transfer_timeout())); connect(trans_timeout_timer_, SIGNAL(timeout()), this, SLOT(on_transfer_timeout()));
connect(this, SIGNAL(signal_session_start(qint64, quint16, bool)), this, SLOT(on_session_start(qint64, quint16, bool)));
} }
tcpServerSend::~tcpServerSend() tcpServerSend::~tcpServerSend()
@ -43,6 +44,7 @@ tcpServerSend::~tcpServerSend()
void tcpServerSend::set_msg_body(const QJsonObject& msgbody) void tcpServerSend::set_msg_body(const QJsonObject& msgbody)
{ {
std::lock_guard<std::mutex> guard(m);
msg_body_ = msgbody; msg_body_ = msgbody;
} }
@ -155,7 +157,6 @@ void tcpServerSend::on_socket_error(QAbstractSocket::SocketError err)
qCritical() << __FUNCTION__ << endl qCritical() << __FUNCTION__ << endl
<< err_str; << err_str;
} }
close(); close();
} }
@ -173,14 +174,8 @@ void tcpServerSend::begin(const QHostAddress& address, quint16 nPort, bool is_se
msg_ptr_->body = msg_body_; msg_ptr_->body = msg_body_;
msg_ptr_->body["server_port"] = nPort; msg_ptr_->body["server_port"] = nPort;
msg_ptr_->body["client_name"] = client_name_; msg_ptr_->body["client_name"] = client_name_;
//if (is_send) {
msg_ptr_->body["request_data_sending"] = 1; msg_ptr_->body["request_data_sending"] = 1;
msg_ptr_->body["data_size"] = bin_data_size_to_send_; msg_ptr_->body["data_size"] = bin_data_size_to_send_;
//}
//else {
// msg_ptr_->body["accept_data_sending"] = 1;
//}
emit signal_listen_successful(msg_ptr_); emit signal_listen_successful(msg_ptr_);
if (listen_timeout_timer_) if (listen_timeout_timer_)
{ {

@ -28,6 +28,7 @@ public:
void setClientName(const QString& strCli) { client_name_ = strCli; } void setClientName(const QString& strCli) { client_name_ = strCli; }
void set_bin_data_to_send(const QByteArray& data); void set_bin_data_to_send(const QByteArray& data);
signals: signals:
void signal_session_start(qint64 sess_id, quint16 nPort, bool is_send);
void signal_data_sess_closed(qint64); void signal_data_sess_closed(qint64);
void signal_listen_successful(QSharedPointer<TP_PROTOCOL_MESSAGE>); void signal_listen_successful(QSharedPointer<TP_PROTOCOL_MESSAGE>);
void signal_bin_data_send_completed(QSharedPointer<TP_PROTOCOL_MESSAGE>); void signal_bin_data_send_completed(QSharedPointer<TP_PROTOCOL_MESSAGE>);

@ -116,7 +116,7 @@ void TPTcpClient::createChildRevSocket(int socketNum)
connect(thread_ptr, &QThread::finished, data_sess_ptr, &QObject::deleteLater); 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(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(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::sgException, this, &TPTcpClient::on_data_recv_close, Qt::QueuedConnection);
data_sessions_[strUuid] = thread_ptr; data_sessions_[strUuid] = thread_ptr;
m_childRevSocket_Map[strUuid] = QPair<bool, tcpClientRecv*>(false, data_sess_ptr); m_childRevSocket_Map[strUuid] = QPair<bool, tcpClientRecv*>(false, data_sess_ptr);
@ -150,7 +150,7 @@ void TPTcpClient::createServerSession(int sessNum)
for (int nIndex = 1; nIndex <= sessNum; nIndex++) { for (int nIndex = 1; nIndex <= sessNum; nIndex++) {
tcpServerSend *data_sess_ptr = new tcpServerSend(nIndex); tcpServerSend *data_sess_ptr = new tcpServerSend(nIndex);
//打开服务 开始监听端口 //打开服务 开始监听端口
connect(this, &TPTcpClient::signal_data_session_start, data_sess_ptr, &tcpServerSend::on_session_start); //connect(this, &TPTcpClient::signal_data_session_start, data_sess_ptr, &tcpServerSend::on_session_start);
//服务打开成功,反馈打开的端口,向接收者发送信息,让其连接来接收文件 //服务打开成功,反馈打开的端口,向接收者发送信息,让其连接来接收文件
connect(data_sess_ptr, &tcpServerSend::signal_listen_successful, this, &TPTcpClient::on_listen_successful); connect(data_sess_ptr, &tcpServerSend::signal_listen_successful, this, &TPTcpClient::on_listen_successful);
//服务关闭反馈 释放服务资源 //服务关闭反馈 释放服务资源
@ -254,7 +254,7 @@ void TPTcpClient::on_auto_connect()
} }
if ((auto_reconnect_) && if ((auto_reconnect_) &&
(ssl_socket_ptr_->state() != QAbstractSocket::SocketState::ConnectedState)) { (ssl_socket_ptr_->state() != QAbstractSocket::SocketState::ConnectedState)) {
//qDebug() << "Reconnect..." << __FUNCTION__; qDebug() << "Reconnect..." << __FUNCTION__;
ssl_socket_ptr_->abort(); ssl_socket_ptr_->abort();
ssl_socket_ptr_->close(); ssl_socket_ptr_->close();
ssl_socket_ptr_->connectToHost(host_ip_, port_); ssl_socket_ptr_->connectToHost(host_ip_, port_);
@ -266,7 +266,7 @@ void TPTcpClient::on_auto_connect()
} }
if ((auto_reconnect_) && if ((auto_reconnect_) &&
(socket_ptr_->state() != QAbstractSocket::SocketState::ConnectedState)) { (socket_ptr_->state() != QAbstractSocket::SocketState::ConnectedState)) {
// qDebug() << "Reconnect..." << __FUNCTION__; qDebug() << "Reconnect..." << __FUNCTION__;
socket_ptr_->abort(); socket_ptr_->abort();
socket_ptr_->close(); socket_ptr_->close();
socket_ptr_->connectToHost(host_ip_, port_); socket_ptr_->connectToHost(host_ip_, port_);
@ -294,7 +294,6 @@ void TPTcpClient::on_disconnected()
{ {
//qDebug() << "TPTcpClient::on_disconnected" << __FUNCTION__; //qDebug() << "TPTcpClient::on_disconnected" << __FUNCTION__;
heartbeat_timer_->stop(); heartbeat_timer_->stop();
for (QMap<QString, ClientDataRecvPair>::iterator it = m_childRevSocket_Map.begin(); it != m_childRevSocket_Map.end(); ++it) for (QMap<QString, ClientDataRecvPair>::iterator it = m_childRevSocket_Map.begin(); it != m_childRevSocket_Map.end(); ++it)
{ {
(*it).first = false; (*it).first = false;
@ -328,11 +327,11 @@ void TPTcpClient::on_msg_received()
if (pClient) if (pClient)
{ {
QString strUuid = pClient->getUuid(); QString strUuid = pClient->getUuid();
//qDebug() << "curUUId:" << strUuid<<" port:"<<nport; setRevSocketisBusy(strUuid, true);
pClient->set_msg_body(msg_ptr->body); pClient->set_msg_body(msg_ptr->body);
emit pClient->sgStartSession(strUuid, host_ip_, nport); emit pClient->sgStartSession(strUuid, host_ip_, nport);
//emit signal_session_start(strUuid, host_ip_, nport); //emit signal_session_start(strUuid, host_ip_, nport);
setRevSocketisBusy(strUuid, true);
} }
} }
else else
@ -419,12 +418,12 @@ void TPTcpClient::on_send_binary_data(QSharedPointer<TP_PROTOCOL_MESSAGE> msg,QS
if (data_sess_ptr) if (data_sess_ptr)
{ {
int sessID = data_sess_ptr->getSessionID(); int sessID = data_sess_ptr->getSessionID();
qDebug() << "curUse ID:" << sessID; setSendSessionisBusy(sessID, true);
data_sess_ptr->setClientName("111"); data_sess_ptr->setClientName("111");
data_sess_ptr->set_msg_body(msg->body); data_sess_ptr->set_msg_body(msg->body);
data_sess_ptr->set_bin_data_to_send(*data_ptr); data_sess_ptr->set_bin_data_to_send(*data_ptr);
emit signal_data_session_start(sessID, data_port_, true); emit data_sess_ptr->signal_session_start(sessID, data_port_, true);
setSendSessionisBusy(sessID, true); //emit signal_data_session_start(sessID, data_port_, true);
} }
} }

@ -28,12 +28,9 @@ tpClientSession::tpClientSession(int ID, const QSslCertificate& ssl_cert, const
dynamic_cast <QSslSocket*>(psocket_)->setLocalCertificate(ssl_cert_); dynamic_cast <QSslSocket*>(psocket_)->setLocalCertificate(ssl_cert_);
dynamic_cast <QSslSocket*>(psocket_)->setPrivateKey(ssl_key_); dynamic_cast <QSslSocket*>(psocket_)->setPrivateKey(ssl_key_);
dynamic_cast <QSslSocket*>(psocket_)->setProtocol(ssl_protocol_); dynamic_cast <QSslSocket*>(psocket_)->setProtocol(ssl_protocol_);
connect(psocket_, SIGNAL(readyRead()), this, SLOT(on_ready_read())); connect(psocket_, SIGNAL(readyRead()), this, SLOT(on_ready_read()));
connect(psocket_, SIGNAL(disconnected()), this, SLOT(on_disconnect())); connect(psocket_, SIGNAL(disconnected()), this, SLOT(on_disconnect()));
dynamic_cast <QSslSocket*>(psocket_)->startServerEncryption(); dynamic_cast <QSslSocket*>(psocket_)->startServerEncryption();
// qDebug() << socket_descriptor_ << " client connected";
} }
tpClientSession::~tpClientSession() tpClientSession::~tpClientSession()
@ -50,15 +47,12 @@ void tpClientSession::on_ready_read()
{ {
QByteArray data_recv; QByteArray data_recv;
data_recv = psocket_->readAll(); data_recv = psocket_->readAll();
decoder_.parser(data_recv); decoder_.parser(data_recv);
QSharedPointer<TP_PROTOCOL_MESSAGE> msg_ptr = QSharedPointer<TP_PROTOCOL_MESSAGE>(new TP_PROTOCOL_MESSAGE); QSharedPointer<TP_PROTOCOL_MESSAGE> msg_ptr = QSharedPointer<TP_PROTOCOL_MESSAGE>(new TP_PROTOCOL_MESSAGE);
while (!decoder_.empty()) while (!decoder_.empty())
{ {
msg_ptr = decoder_.front(); msg_ptr = decoder_.front();
emit signal_msg_received(socket_descriptor_, msg_ptr); emit signal_msg_received(socket_descriptor_, msg_ptr);
decoder_.pop(); decoder_.pop();
} }
} }
@ -70,11 +64,7 @@ void tpClientSession::force_close()
void tpClientSession::on_disconnect() void tpClientSession::on_disconnect()
{ {
// qDebug() << __FUNCTION__ << endl
// << socket_descriptor_ << " Disconnected";
emit signal_disconnected(socket_descriptor_); emit signal_disconnected(socket_descriptor_);
socket_close(); socket_close();
} }
@ -86,12 +76,10 @@ void tpClientSession::on_sendPackage(int sess_id, QSharedPointer<QByteArray> dat
void tpClientSession::socket_close() void tpClientSession::socket_close()
{ {
if (psocket_->isOpen()) if (psocket_->isOpen())
{ {
psocket_->abort(); psocket_->abort();
psocket_->close(); psocket_->close();
} }
} }

@ -23,21 +23,13 @@ TPTcpServer::~TPTcpServer()
bool TPTcpServer::server_begin(const QHostAddress& address, quint16 nPort) bool TPTcpServer::server_begin(const QHostAddress& address, quint16 nPort)
{ {
//qDebug() << __FUNCTION__;
if (!this->listen(address, nPort)) if (!this->listen(address, nPort))
{ {
qWarning() << __FUNCTION__ << endl qWarning() << __FUNCTION__ << endl << "Could not start server. Error: " << this->errorString();
<< "Could not start server. Error: " << this->errorString();
return false; return false;
} }
else
{
//qDebug() << __FUNCTION__ << endl
// << "Server started. Listening to port " << nPort;
return true; return true;
} }
}
void TPTcpServer::server_end() void TPTcpServer::server_end()
{ {
@ -151,7 +143,7 @@ void TPTcpServer::createServerSendSockets(int sessNum)
{ {
for (int nIndex = 1; nIndex <= sessNum; nIndex++) { for (int nIndex = 1; nIndex <= sessNum; nIndex++) {
tcpServerSend *data_sess_ptr = new tcpServerSend(nIndex); tcpServerSend *data_sess_ptr = new tcpServerSend(nIndex);
connect(this, &TPTcpServer::signal_data_session_start, data_sess_ptr, &tcpServerSend::on_session_start); //connect(this, &TPTcpServer::signal_data_session_start, data_sess_ptr, &tcpServerSend::on_session_start);
connect(data_sess_ptr, &tcpServerSend::signal_listen_successful, this, &TPTcpServer::on_listen_successful); connect(data_sess_ptr, &tcpServerSend::signal_listen_successful, this, &TPTcpServer::on_listen_successful);
connect(data_sess_ptr, SIGNAL(signal_data_sess_closed(qint64)), this, SLOT(on_data_session_closed(qint64))); connect(data_sess_ptr, SIGNAL(signal_data_sess_closed(qint64)), this, SLOT(on_data_session_closed(qint64)));
connect(data_sess_ptr, SIGNAL(signal_bin_data_send_completed(QSharedPointer<TP_PROTOCOL_MESSAGE>)), this, SLOT(on_data_send_completed(QSharedPointer<TP_PROTOCOL_MESSAGE>))); connect(data_sess_ptr, SIGNAL(signal_bin_data_send_completed(QSharedPointer<TP_PROTOCOL_MESSAGE>)), this, SLOT(on_data_send_completed(QSharedPointer<TP_PROTOCOL_MESSAGE>)));
@ -204,7 +196,7 @@ void TPTcpServer::createClientRecvSocket(int socketNum)
connect(thread_ptr, &QThread::finished, data_sess_ptr, &QObject::deleteLater); connect(thread_ptr, &QThread::finished, data_sess_ptr, &QObject::deleteLater);
connect(data_sess_ptr, &tcpClientRecv::signal_data_recv_completed, this, &TPTcpServer::on_data_recv_completed_client); connect(data_sess_ptr, &tcpClientRecv::signal_data_recv_completed, this, &TPTcpServer::on_data_recv_completed_client);
connect(this, &TPTcpServer::signal_session_start, data_sess_ptr, &tcpClientRecv::on_session_start); //connect(this, &TPTcpServer::signal_session_start, data_sess_ptr, &tcpClientRecv::on_session_start);
connect(data_sess_ptr, &tcpClientRecv::sgException, this, &TPTcpServer::on_data_recv_close); connect(data_sess_ptr, &tcpClientRecv::sgException, this, &TPTcpServer::on_data_recv_close);
data_sessions_[strUuid] = thread_ptr; data_sessions_[strUuid] = thread_ptr;
m_childRevSocket_Map[strUuid] = QPair<bool, tcpClientRecv*>(false, data_sess_ptr); m_childRevSocket_Map[strUuid] = QPair<bool, tcpClientRecv*>(false, data_sess_ptr);
@ -329,10 +321,10 @@ void TPTcpServer::on_msg_received(int sessID, QSharedPointer<TP_PROTOCOL_MESSAGE
if (pClient) if (pClient)
{ {
QString strUuid = pClient->getUuid(); QString strUuid = pClient->getUuid();
qDebug() << "curUUId:" << strUuid << " port:" << nport;
pClient->set_msg_body(msg_ptr->body);
emit signal_session_start(strUuid, strCliIP, nport);
setRevSocketisBusy(strUuid, true); setRevSocketisBusy(strUuid, true);
pClient->set_msg_body(msg_ptr->body);
emit pClient->sgStartSession(strUuid, strCliIP, nport);
//emit signal_session_start();
} }
return; return;
} }
@ -482,9 +474,8 @@ void TPTcpServer::on_data_session_closed(qint64 sessID)
void TPTcpServer::on_listen_successful(QSharedPointer<TP_PROTOCOL_MESSAGE> msg_ptr) void TPTcpServer::on_listen_successful(QSharedPointer<TP_PROTOCOL_MESSAGE> msg_ptr)
{ {
QString client_name = msg_ptr->body["client_name"].toString(); QString client_name = msg_ptr->body["client_name"].toString();
if (client_name.isEmpty()) return; if (client_name.isEmpty())
return;
//data_port_ = msg_ptr->body["server_port"].toInt();
send_package(client_name, *msg_ptr); send_package(client_name, *msg_ptr);
} }
@ -504,12 +495,12 @@ void TPTcpServer::send_binary_data(const QString& strClient, TP_PROTOCOL_MESSAGE
if (data_sess_ptr) if (data_sess_ptr)
{ {
int sessID = data_sess_ptr->getSessionID(); int sessID = data_sess_ptr->getSessionID();
//qDebug() << "curUse ID:" << sessID; setSendSessionisBusy(sessID, true);
data_sess_ptr->setClientName(it->client_name_); data_sess_ptr->setClientName(it->client_name_);
data_sess_ptr->set_msg_body(msg.body); data_sess_ptr->set_msg_body(msg.body);
data_sess_ptr->set_bin_data_to_send(binaryData); data_sess_ptr->set_bin_data_to_send(binaryData);
emit signal_data_session_start(sessID, data_port_, true); emit data_sess_ptr->signal_session_start(sessID, data_port_, true);
setSendSessionisBusy(sessID, true); //emit signal_data_session_start(sessID, data_port_, true);
} }
} }
} }
@ -521,11 +512,11 @@ void TPTcpServer::send_binary_data(const QString& strClient, TP_PROTOCOL_MESSAGE
if (data_sess_ptr) if (data_sess_ptr)
{ {
int sessID = data_sess_ptr->getSessionID(); int sessID = data_sess_ptr->getSessionID();
setSendSessionisBusy(sessID, true);
data_sess_ptr->setClientName(strClient); data_sess_ptr->setClientName(strClient);
data_sess_ptr->set_msg_body(msg.body); data_sess_ptr->set_msg_body(msg.body);
data_sess_ptr->set_bin_data_to_send(binaryData); data_sess_ptr->set_bin_data_to_send(binaryData);
emit signal_data_session_start(sessID, data_port_, true); emit data_sess_ptr->signal_session_start(sessID, data_port_, true);
setSendSessionisBusy(sessID, true);
} }
} }
} }

@ -22,9 +22,9 @@
#include "databasesql.h" #include "databasesql.h"
#include "lpCryptokey.h" #include "lpCryptokey.h"
#define VERSION_HUB "3.0.4.0" #define VERSION_HUB "3.0.5.0"
#define VERSION_ALG "3.0.1.4" #define VERSION_ALG "3.0.1.4"
#define UPDATE_TIME "2021-12-15" #define UPDATE_TIME "2021-12-19"
#pragma execution_character_set("utf-8") #pragma execution_character_set("utf-8")
#define MODEL_UI_ICON_NONE ":/image/no-img" #define MODEL_UI_ICON_NONE ":/image/no-img"

@ -29,7 +29,7 @@ valueMainUI::valueMainUI(QWidget *parent)
setupTrayIcon();//后台任务栏初始化 setupTrayIcon();//后台任务栏初始化
setWindowIcon(QIcon(WINDOWICON)); setWindowIcon(QIcon(WINDOWICON));
setWindowTitle(tr("识别定位一体检测系统(v1.3.0 21.12.15)")); setWindowTitle(tr("识别定位一体检测系统(v1.4.0 21.12.19)"));
lpGlobalData::instance(); lpGlobalData::instance();
lpConfig::instance()->loadConfig(); lpConfig::instance()->loadConfig();

Loading…
Cancel
Save