Qt C++ TCP服务端响应多客户端通讯

本示例使用的设备:WIFI无线4G网络RFID云读卡器远程网络开关物流网阅读器TTS语音-淘宝网 (taobao.com)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox"
#include <QDebug>
#include <exception>
#include <QTcpServer>
#include <QTcpSocket>
#include <QObject>
#include <QTime>
#include <QTreeWidgetItem>
#include <QClipboard>bool listening=false;
QTcpServer m_server;
QTcpSocket m_socket;//获取本机所有网卡IP------------------------------------------------------------------------------------------------------
QStringList getAllIPAddresses() {QStringList ips;QList<QHostAddress> list = QNetworkInterface::allAddresses();for (int i = 0; i < list.size(); ++i) {QHostAddress address = list.at(i);// 检查是否为IPv4地址,并排除回环地址if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress::LocalHost) {ips << address.toString();}}return ips;
}//获取系统现时间-------------------------------------------------------------------------------------------------------------
QString getsystime(){QTime time = QTime::currentTime();QString timeStr = time.toString("hh:mm:ss.zzz");return timeStr;
}//获取系统日期时间-------------------------------------------------------------------------------------------------------------
QString getsysdatetime(){QDateTime currentDateTime = QDateTime::currentDateTime();QString dateTimeString = currentDateTime.toString("yy-MM-dd hh:mm:ss");return dateTimeString;
}//QByteArray转16进制QString------------------------------------------------------------------------------------------------
QString ByteArrayToHexString(QByteArray data){QString ret(data.toHex().toUpper());int len = ret.length()/2;for(int i=1;i<len;i++){ret.insert(2*i+i-1," ");}return ret;
}//通讯报文显示-----------------------------------------------------------------------------------------------------
void MainWindow::listadditems(int ctr,QString listinfo){switch (ctr){case 0:if(ui->listWidget_report->count()>30){ui->listWidget_report->clear();}ui->listWidget_report->addItem(listinfo);ui->listWidget_report->setCurrentRow(ui->listWidget_report->count()-1);break;case 1:ui->listWidget_online->addItem(listinfo);ui->listWidget_online->setCurrentRow(ui->listWidget_online->count()-1);}
}MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->TEPort->setPlainText("39169");        //出厂默认39169端口ui->spinBox_dispdelay->setValue(20);ui->spinBox_swit->setValue(30);ui->spinBox_voice->setValue(8);ui->textEdit_disp->setText("欢迎您使用我们的网络读卡器!");ui->textEdit_tts->setText("感谢您的使用,您的支持是我们最大的动力!");QStringList ips = getAllIPAddresses();foreach (QString ip, ips) {ui->CBIP->addItem(ip);}if(ui->CBIP->count()<1){QMessageBox::information(NULL, "提示", "未搜索到本机的网卡,系统不能正常运行!");delete ui;}
}MainWindow::~MainWindow()
{delete ui;
}//启动、关闭TCP服务-------------------------------------------------------------------------------------------------------
void MainWindow::initserver(){try{if(ui->pushButton_initserver->text()=="开启TCP服务"){QString ipstr=ui->CBIP->currentText();QHostAddress localeip(ipstr);quint16 port=ui->TEPort->toPlainText().toUInt();m_server = new QTcpServer(this);m_server->listen(localeip, port);connect(m_server, &QTcpServer::newConnection, this, &MainWindow::onNewConnection);listening=true;ui->pushButton_initserver->setText("停止");listadditems(0,getsystime()+" Tcp Server is listening...");}else{listening=false;m_server->close();ui->pushButton_initserver->setText("开启TCP服务");for(int i=0;i<tcpclientlist.count();i++){tcpclientlist.at(i)->close();//tcpclientlist.remove(i);ui->listWidget_online->takeItem(i);}tcpclientlist.clear();listadditems(0,getsystime()+" Tcp Server is close! ");}}catch(_exception){listening=false;ui->pushButton_initserver->setText("开启TCP服务");}
}//侦听到有新的TCP客户端接入服务--------------------------------------------------------------------------------------------
void MainWindow::onNewConnection()
{m_socket = m_server->nextPendingConnection();tcpclientlist.append(m_socket);QString RemoIp=m_socket->peerAddress().toString();QString RemoPort=QString::number( m_socket->peerPort());listadditems(1,RemoIp+":"+RemoPort);listadditems(0,getsystime()+" NewConn "+RemoIp+":"+RemoPort);connect(m_socket, &QTcpSocket::readyRead, this, &MainWindow::onReadyRead);connect(m_socket, &QTcpSocket::disconnected, this, &MainWindow::onClientDisconnected);connect(m_socket, &QTcpSocket::connected, this, &MainWindow::onConnected);
//  connect(m_socket, &QTcpSocket::stateChanged, this, &MainWindow::onStateChanged);}//接收到TCP客户端传送来来的数据-------------------------------------------------------------------------------------------
void MainWindow::onReadyRead()
{QByteArray buffer;for(int row=0;row<tcpclientlist.count();row++){m_socket=tcpclientlist.at(row);buffer = m_socket->readAll();if(buffer.length()!=0){QString RemoIp=m_socket->peerAddress().toString();QString RemoPort=QString::number( m_socket->peerPort());listadditems(0,getsystime()+" Receive: "+RemoIp+":"+RemoPort+"    "+ByteArrayToHexString(buffer));unsigned char databuff[buffer.length()];std::copy(buffer.begin(), buffer.end(), databuff);switch (databuff[0]){case 0xc1:case 0xcf:Analyze_c1_cf(row,databuff,buffer.length());          //解析读取IC卡卡号break;case 0xd1:case 0xdf:Analyze_d1_df(row,databuff,buffer.length());          //解析读取ID卡卡号break;default:break;}}}
}//侦测到TCP客户端断开连接---------------------------------------------------------------------------------------------
void MainWindow::onClientDisconnected()
{QString RemoIp=m_socket->peerAddress().toString();quint16 RemoPort= m_socket->peerPort();for(int i=0;i<tcpclientlist.count();i++){if(tcpclientlist.at(i)->peerAddress().toString()==RemoIp && tcpclientlist.at(i)->peerPort()==RemoPort){tcpclientlist.remove(i);ui->listWidget_online->takeItem(i);listadditems(0,getsystime()+" Disconn: "+RemoIp+":"+QString::number(RemoPort));}}
}void MainWindow::onConnected()
{QString RemoIp=m_socket->peerAddress().toString();QString RemoPort=QString::number( m_socket->peerPort());
}//void MainWindow::onStateChanged(QAbstractsocket::SocketState socketstate){
//    switch (socketstate){
//    case QAbstractSocket::UnconnectedState:ui->labConnectState->setText("Unconnectedstate");break;
//    case QAbstractSocket::HostLookupState:ui->labConnectState->setText("HostLookupstate");break;
//    case QAbstractSocket::ConnectedState:ui->labConnectState->setText("connectedstate");break;
//    case QAbstractSocket::ConnectingState:ui->labConnectState->setText("connectingstate");break;
//    case QAbstractSocket::BoundState: ui->labConnectState->setText("Boundstate");break;
//    case QAbstractSocket::ClosingState:ui->labConnectState->setText("closingstate");break;
//    case QAbstractSocket::ListeningState:ui->labConnectState->setText("listeningstate");break;
//    }
//}//解析读取IC卡卡号-------------------------------------------------------------------------------------------------------------------
void MainWindow::Analyze_c1_cf(int socketid,unsigned char databuff[], qint64 buflen)
{QString IPAddress=QString::asprintf("%d", databuff[1])+"."+QString::asprintf("%d", databuff[2])+"."+QString::asprintf("%d", databuff[3])+"."+QString::asprintf("%d", databuff[4]); //设备IP地址,广域网上使用,一般不对此IP回应,而是对数据流的 ip及端口 回应QString DeviceNumber=QString::asprintf("%05d",databuff[5]+databuff[6]*256);   //设备自编机号QString FrameNumber=QString::asprintf("%05d",databuff[7]+databuff[8]*256);    //数据包号int cardnolen=databuff[9];QString CardnoHexZ="";          //16进制卡号正码QString CardnoHexF="";          //16进制卡号反码for (int i=0;i<cardnolen;i++){CardnoHexZ=CardnoHexZ+QString::asprintf("%02X", databuff[10+i]);if(i<4){CardnoHexF=CardnoHexF+QString::asprintf("%02X", databuff[9+cardnolen-i]);}   //只取4个字节计算8H10D反码}QString SerialNumber="";        //设备全球唯一硬件序号for (int i=10+cardnolen;i<buflen;i++){SerialNumber=SerialNumber+QString::asprintf("%02X", databuff[i]);}bool status;QString Cardno8H10D=QString::asprintf("%010u",CardnoHexF.toUInt(&status,16));  //转8H10D反码卡号QString  DispInf;if (databuff[0]==0xc1){DispInf="读取IC卡号,";}else{DispInf="IC卡离开读卡器,";}DispInf=DispInf+"设备IP:"+IPAddress+",机号:"+DeviceNumber+",数据包号:"+FrameNumber+",16进制卡号:"+CardnoHexZ+",转8H10D反码:"+Cardno8H10D+",设备全球唯一序号:"+SerialNumber;ui->plainTextEdit_msg->setPlainText(DispInf);if(ui->checkBox_Resp->isChecked()){Respondinfo(socketid,getsysdatetime()+"卡号:"+Cardno8H10D);}  //回应驱动设备显示+蜂鸣响声
}//解析读取ID卡卡号-------------------------------------------------------------------------------------------------------------------
void MainWindow::Analyze_d1_df(int socketid,unsigned char databuff[], qint64 buflen)
{QString IPAddress=QString::asprintf("%d", databuff[1])+"."+QString::asprintf("%d", databuff[2])+"."+QString::asprintf("%d", databuff[3])+"."+QString::asprintf("%d", databuff[4]); //设备IP地址,广域网上使用,一般不对此IP回应,而是对数据流的 ip及端口 回应QString DeviceNumber=QString::asprintf("%05d",databuff[5]+databuff[6]*256);   //设备自编机号QString FrameNumber=QString::asprintf("%05d",databuff[7]+databuff[8]*256);    //数据包号QString CardnoHexZ="";          //16进制卡号正码QString CardnoHexF="";          //16进制卡号反码for (int i=0;i<5;i++){CardnoHexZ=CardnoHexZ+QString::asprintf("%02X", databuff[9+i]);if(i<4){CardnoHexF=CardnoHexF+QString::asprintf("%02X", databuff[9+3-i]);}   //只取4个字节计算8H10D反码}QString SerialNumber="";        //设备全球唯一硬件序号for (int i=9+5;i<buflen;i++){SerialNumber=SerialNumber+QString::asprintf("%02X", databuff[i]);}bool status;QString Cardno8H10D=QString::asprintf("%010u",CardnoHexF.toUInt(&status,16));  //转8H10D反码卡号QString  DispInf;if (databuff[0]==0xd1){DispInf="读取ID卡号,";}else{DispInf="ID卡离开读卡器,";}DispInf=DispInf+"设备IP:"+IPAddress+",机号:"+DeviceNumber+",数据包号:"+FrameNumber+",16进制卡号:"+CardnoHexZ+",转8H10D反码:"+Cardno8H10D+",设备全球唯一序号:"+SerialNumber;ui->plainTextEdit_msg->setPlainText(DispInf);if(ui->checkBox_Resp->isChecked()){Respondinfo(socketid,getsysdatetime()+"卡号:"+Cardno8H10D);}  //回应驱动设备显示+蜂鸣响声
}void MainWindow::on_btnClose_clicked()
{m_server->close();
}//向指定的客户端发送数据--------------------------------------------------------------------------------------------------------------
void MainWindow::SendBufToSockID(int socketid,QByteArray rbuffer){m_socket=tcpclientlist.at(socketid);m_socket->write(rbuffer);QString RemoIp=m_socket->peerAddress().toString();QString RemoPort=QString::number( m_socket->peerPort());QString SendHex=getsystime()+" Send To: "+(RemoIp+":"+RemoPort+"             ").mid(0,22);SendHex=SendHex+ByteArrayToHexString(rbuffer);listadditems(0,SendHex);
}void MainWindow::on_pushButton_initserver_clicked()
{initserver();
}//驱动读卡器蜂鸣响声-----------------------------------------------------------------------
void MainWindow::on_btnSendbeep_clicked()
{QListWidgetItem *item = ui->listWidget_online->currentItem();int row = ui->listWidget_online->row(item);if(row<0){QMessageBox::critical(this, "警告", "请选择一台在线设备再执行此功能!", QMessageBox::Ok);}else{QByteArray sendData;sendData.append(0x96);                             //功能码quint16 devno=0;sendData.append(devno % 256);                      //机号低位sendData.append(devno / 256);                      //机号高位,高低位都为0表示任意机号sendData.append(ui->CBbeep->currentIndex());       //蜂鸣响声代码SendBufToSockID(row,sendData);}
}//驱动读卡器开启继电器-----------------------------------------------------------------------
void MainWindow::on_btnswitchon_clicked()
{QListWidgetItem *item = ui->listWidget_online->currentItem();int row = ui->listWidget_online->row(item);if(row<0){QMessageBox::critical(this, "警告", "请选择一台在线设备再执行此功能!", QMessageBox::Ok);}else{QByteArray sendData;sendData.append(0x78);                             //功能码quint16 devno=0;sendData.append(devno % 256);                      //机号低位sendData.append(devno / 256);                      //机号高位,高低位都为0表示任意机号QString swithno="F"+QString::asprintf("%d",ui->CBSwitch->currentIndex());bool status;sendData.append(swithno.toUInt(&status,16));       //选择继电器quint16 deltime=ui->spinBox_swit->value();sendData.append(deltime % 256);                    //开启延时低位sendData.append(deltime / 256);                    //开启延时高位SendBufToSockID(row,sendData);}
}//驱动读卡器关闭已开启的继电器-----------------------------------------------------------------
void MainWindow::on_btnswitchoff_clicked()
{QListWidgetItem *item = ui->listWidget_online->currentItem();int row = ui->listWidget_online->row(item);if(row<0){QMessageBox::critical(this, "警告", "请选择一台在线设备再执行此功能!", QMessageBox::Ok);}else{QByteArray sendData;sendData.append(0x78);                             //功能码quint16 devno=0;sendData.append(devno % 256);                      //机号低位sendData.append(devno / 256);                      //机号高位,高低位都为0表示任意机号QString swithno="E"+QString::asprintf("%d",ui->CBSwitch->currentIndex());bool status;sendData.append(swithno.toUInt(&status,16));       //选择继电器quint16 deltime=ui->spinBox_swit->value();sendData.append(deltime % 256);                    //开启延时低位sendData.append(deltime / 256);                    //开启延时高位SendBufToSockID(row,sendData);}
}//驱动读卡器蜂鸣响声并显示文字---------------------------------------------------------------------
void MainWindow::on_btnDispbeep_clicked()
{QListWidgetItem *item = ui->listWidget_online->currentItem();int row = ui->listWidget_online->row(item);if(row<0){QMessageBox::critical(this, "警告", "请选择一台在线设备再执行此功能!", QMessageBox::Ok);}else{QByteArray sendData;sendData.append(0x5A);                             //功能码quint16 devno=0;sendData.append(devno % 256);                      //机号低位sendData.append(devno / 256);                      //机号高位,高低位都为0表示任意机号sendData.append(ui->CBbeep->currentIndex());       //蜂鸣响声代码,255表示不响声sendData.append(ui->spinBox_dispdelay->value());   //文字显示时长,QString dispstr=ui->textEdit_disp->toPlainText()+"                                  ";  //加空格是为了确保满屏34位显示QByteArray Dispbyte=dispstr.toLocal8Bit();for(int i=0;i<34;i++){sendData.append(Dispbyte[i]);}SendBufToSockID(row,sendData);}
}//驱动读卡器蜂鸣响声+显示文字+播报TTS语音+开启继电器开关
void MainWindow::on_btndispbeeptts_clicked()
{QListWidgetItem *item = ui->listWidget_online->currentItem();int row = ui->listWidget_online->row(item);if(row<0){QMessageBox::critical(this, "警告", "请选择一台在线设备再执行此功能!", QMessageBox::Ok);}else{if(ui->spinBox_voice->value()>16){ui->spinBox_voice->setValue(16);} //tts最大语音取值16QString strls="[v"+QString::asprintf("%d",ui->spinBox_voice->value())+"]";strls=strls+ui->textEdit_tts->toPlainText().trimmed();QByteArray SpeakArr=strls.toLocal8Bit();         //TS语音转换为Ansi码quint8 speakbytes=SpeakArr.size();quint8 dispbytes=34;                //双行显示屏显示长度34,四行屏显示长度72QByteArray sendData;sendData.append(0x5c);                             //功能码quint16 devno=0;sendData.append(devno % 256);                      //机号低位sendData.append(devno / 256);                      //机号高位,高低位都为0表示所有机sendData.append(ui->CBbeep->currentIndex());       //蜂鸣响声代码,取值255表示不响QString swithno="F"+QString::asprintf("%d",ui->CBSwitch->currentIndex());bool status;sendData.append(swithno.toUInt(&status,16));       //选择继电器quint16 deltime=ui->spinBox_swit->value();sendData.append(deltime % 256);                    //延时低位sendData.append(deltime / 256);                    //延时高位sendData.append(ui->spinBox_dispdelay->value());   //文字显示时长,quint8 begindisp =0;                               //在显示屏中的哪个位置开始显示,一般取0sendData.append(begindisp);sendData.append(dispbytes);                        //显示文字长度sendData.append(speakbytes);                       //tts语音长茺QString dispstr=ui->textEdit_disp->toPlainText()+"                                  ";  //加空格是为了确保满屏34位显示QByteArray Dispbyte=dispstr.toLocal8Bit();for(int i=0;i<dispbytes;i++){sendData.append(Dispbyte[i]);       //显示信息}for(int i=0;i<speakbytes;i++){sendData.append(SpeakArr[i]);       //TTS语音信息}sendData.append(0x55);      //防干扰后缀sendData.append(0xaa);sendData.append(0x66);sendData.append(0x99);SendBufToSockID(row,sendData);}
}//接收到刷卡数据立即回应--------------------------------------------------------------------------
void MainWindow::Respondinfo(int socketid,QString Dispinf)
{QByteArray RespBuff;RespBuff.append(0x5A);                             //功能码quint16 devno=0;RespBuff.append(devno % 256);                      //机号低位RespBuff.append(devno / 256);                      //机号高位,高低位都为0表示任意机RespBuff.append(ui->CBbeep->currentIndex());       //蜂鸣响声代码,255表示不响声RespBuff.append(ui->spinBox_dispdelay->value());   //文字显示时长,QString dispstr=Dispinf+"                                  ";  //加空格是为了确保满屏34位显示QByteArray Dispbyte=dispstr.toLocal8Bit();for(int i=0;i<34;i++){RespBuff.append(Dispbyte[i]);}m_socket=tcpclientlist.at(socketid);m_socket->write(RespBuff);QString RemoIp=m_socket->peerAddress().toString();QString RemoPort=QString::number( m_socket->peerPort());QString SendHex=getsystime()+" Send To: "+(RemoIp+":"+RemoPort+"             ").mid(0,22);SendHex=SendHex+ByteArrayToHexString(RespBuff);listadditems(0,SendHex);
}void MainWindow::on_btncopyreport_clicked()
{QString listinf;int row=ui->listWidget_report->count();if (row<1){return;}else{for (int i=0;i<row;i++){QListWidgetItem *item = ui->listWidget_report->item(i);listinf=listinf+item->text()+"\n";}QClipboard *clipboard = QApplication::clipboard();clipboard->setText(listinf);QMessageBox::information(this, "提示", "显示数据报文已拷贝到剪切板");}
}

源码下载 :https://download.csdn.net/download/zhangjin7422/89421064

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI与Python:探索智能化时代的编程利器

AI与Python的强大组合 Python因其简洁易学的语法和丰富的库生态&#xff0c;成为了AI开发的首选语言。无论是数据处理、机器学习还是深度学习&#xff0c;Python都能提供强大的支持。以下是几个常见的AI应用领域&#xff1a; 数据分析与处理 使用Pandas和NumPy库进行数据处理和…

pnpm : 无法加载文件 C:\Users\WTK\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。

PS D:\VUE3\vue-pure-admin-main> pnpm i pnpm : 无法加载文件 C:\Users\WTK\AppData\Roaming\npm\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?Link ID135170 中的 about_Execution_Policies。 所在…

Lexar NM620 512GB SSD PCIE3.0 X4测评

Lexar NM620 512GB SSD PCIE3.0 X4测评 官方可选容量256GB~2TB PCIE 3.0X4 支持NVME 1.4协议 CDM顺序Read速度3448MB\s CDM顺序Write速度2626MB\s CDM 4K随机Read速度465MB\s CDM 4K随机Write速度602MB\s AS SSD顺序Read速度为2855MB\s AS SSD顺序Write速度为2331MB\s AS SSD…

vue2和vue 3 的响应式原理

vue 3 响应式原理 在 Vue 3 中&#xff0c;响应式系统的核心是使用了 ES6 的 Proxy 对象来实现对数据的拦截和响应式更新。 简单的 Proxy 示例&#xff1a; const data { count: 0 }; const handler {get(target, key, receiver) {// 当访问属性时触发track(target, key);…

几款让你怦然心动的神奇工具——搜嗖工具箱

alteredqualia AlteredQualia 脑洞爆炸器网站&#xff0c;不得不说这是一个神奇的网站&#xff0c;在这个网站上你可以实现不可思议的各种操作&#xff0c;让我们对网站有了新的认知&#xff0c;因为它告诉你不是所有有趣的网站都那么花哨&#xff0c;有些网站看着外形平淡无奇…

Javascript - 请问可以new一个箭头函数吗?

&#x1f690;new操作符的步骤 在JavaScript中&#xff0c;new 操作符用于创建一个对象实例&#xff0c;具体来说&#xff0c;它会执行以下几步操作&#xff1a; 创建一个新对象&#xff1a; 创建一个新的空对象&#xff0c;且这个对象的 __proto__ 属性会被设置为构造函数的 …

LabVIEW结构体内部缺陷振动检测

结构体内部缺陷会改变其振动特性&#xff0c;通过振动分析可以检测并定位这些缺陷。本文详细分析内部缺陷对振动的影响&#xff0c;从频谱分析、时域分析和模态分析等多角度探讨基于LabVIEW的检测方法&#xff0c;提供实施步骤和注意事项&#xff0c;帮助工程师有效利用LabVIEW…

如何解决跨境传输常见的安全及效率问题?

在当今全球化的商业版图中&#xff0c;企业为了拓展国际市场和增强竞争力&#xff0c;跨境传输数据已成为一项不可或缺的业务活动。合格的数据跨境传输方案&#xff0c;应考虑以下要素&#xff1a; 法律合规性&#xff1a;确保方案符合所有相关国家的数据保护法律和国际法规&am…

对大数据的批量导入MySQL数据库

自己的库里有索引在用insert导入数据时会变慢很多 使用事务批量导入 可以配置使用springmybatis整合的方式关闭自动提交事务&#xff08;地址&#xff09;&#xff0c;选择批量导入每一百条导入使用list存储值传入到mybatis中 http://x125858805.iteye.com/blog/2369243 list.a…

c语言中的gets()函数记录

C语言中的gets()函数用于从标准输入&#xff08;通常是键盘&#xff09;中读取一行输入&#xff0c;并将其存储为C字符串。该函数会读取输入直至遇到换行符&#xff08;\n&#xff09;&#xff0c;然后丢弃换行符&#xff0c;将其余字符存储在字符串中&#xff0c;并在字符串末…

ATF是如何完成双系统切换的?

ATF&#xff08;Arm Trusted Firmware&#xff09;是一个用于ARM架构处理器的可信固件&#xff0c;它最初提供的最主要的功能就是&#xff1a;双系统切换和电源管理。 那么如何进行双系统切换呢&#xff0c;在双系统切换的示例中&#xff0c;除了CPU的跳转&#xff0c;例如CPU…

Ubuntu Updates for this repository will not be applied

1. 问题描述 在Ubuntu中使用apt update时提示如下错误信息。 Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB] Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB] Get:3 http://archive.ubuntu.com/ubuntu jammy-backports InRele…

使用静态方法接受对象参数

我们先来看一个例子 public class MyInteger { private int value; // 构造函数 public MyInteger(int value) { this.value value; } // 实例方法 public boolean isEven() { return value % 2 0; } // 静态方法接受int参数 public static boolean isEvenStatic…

leetcode打卡#day44 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零

1049. 最后一块石头的重量 II class Solution { public:int lastStoneWeightII(vector<int>& stones) {vector<int> dp(1501, 0);int sum 0;for (int i 0; i < stones.size(); i) {sum stones[i];}int target sum / 2;for (int i 0; i < stones.si…

动态功能连接评估方法的变异性

摘要 背景&#xff1a;动态功能连接(dFC)已成为理解大脑功能的一种重要测量指标。虽然已经开发了各种各样的方法来评估dFC&#xff0c;但目前尚不清楚方法的选择会如何影响结果。在这里&#xff0c;本研究旨在考察常用dFC方法的结果变异性。 方法&#xff1a;本研究在Python中…

IT人的拖延——拖是因为不想离开“舒适区”?

人都是求“稳”的,在一个区域内呆了很久,也很舒适了,如果冒险离开进入未知的区域,万一结果不好怎么办?万一自己不适合怎么办?万一这个区域有着自己难以忍受的东西怎么办?这些对未知区域的恐惧感让我们在面对应该要做的事情时,不自觉地又拖延了起来。比如,我们在面临需…

【TF-IDF|1】深入解析TF-IDF算法—基础介绍

TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种用于文本挖掘和信息检索的加权技术&#xff0c;用来评估一个词语对于一个文档集或一个语料库的重要程度。下面我们将从理论到实践&#xff0c;逐步解析TF-IDF算法&#xff0c;并编写一个简单的实…

阻塞IO、非阻塞IO、IO复用的区别 ?(非常详细)零基础入门到精通,收藏这一篇就够了

前言 在《Unix网络编程》一书中提到了五种IO模型&#xff0c;分别是&#xff1a;阻塞IO、非阻塞IO、IO复用、信号驱动IO以及异步IO。本篇文章主要介绍IO的基本概念以及阻塞IO、非阻塞IO、IO复用三种模型&#xff0c;供大家参考学习。 一、什么是IO 计算机视角理解IO: 对于计…

const与static区别

const与static的主要区别在于它们修饰的对象的行为和属性。 const 用于声明一个值不能被修改的常量。它主要用于定义常量、修饰指针、函数的输入参数和返回值&#xff0c;以确保这些值在程序运行期间保持不变。const修饰的变量或对象具有不可变性&#xff0c;这有助于提高程序的…

算法练习(一)——数学公式,逻辑思维,DFS递归

算法练习 题目一题干解法代码解释 Tips 题目二题干解法代码解释 Tips 题目三题干解法代码解释 Tips 题目一 题干 给定一个数a&#xff0c;这个a是可以由一组m个连续的正整数相加得到的&#xff0c;求这个m的最小值。举例&#xff1a;a211234561011&#xff0c;会发现10和11是…