QT TCP 文件传输程序中 文件无法传输

点击传送文件,一直显示“连接中...”,进度条也不更新,是怎么回事啊

5个回答

可能与对方的网络不通, 检查网络看看

就是这个样子,哪位大神能解决一下

代码有问题, 可能是头文件里没有实现startTranfer槽函数

应是说头文件里有声明这函数, cpp文件里没有实现这函数

// 当连接服务器成功时,发出connected()信号,开始传送文件
connect(tcpClient, SIGNAL(connected()), this, SLOT(startTransfer()));

connect(tcpClient, SIGNAL(bytesWritten(qint64)),
        this, SLOT(updateClientProgress(qint64)));

connect(tcpClient, SIGNAL(error(QAbstractSocket::SocketError)),
        this, SLOT(displayError(QAbstractSocket::SocketError)));
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
QT 多线程 TCP文件传输 接收不完全

最近学习文件传输 然后写了一个同窗口的发送文件和接收 小文件大文件都没问题 然后又想弄个多线程的文件传输 然后就遇到问题了 1. 首先传输小文件没问题,然后传送一般的不是很大的文件的时候就会出现客户端发送完毕,而服务器没有接收完的情况,这是什么原因? ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713267_242360.png) 2. 然后传输大文件时,会出现程序崩溃的情况,这个是啥情况 ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713442_570465.png)![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713456_37472.png) 3. 再然后 在线程中如何关闭socket? 我在槽函数中关闭的话,会报错 好像说是 QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 0x0x246e9610. Receiver '' (of type 'QNativeSocketEngine') was created in thread 0x0x2462d1d0", file [url=kernel\qcoreapplication.cpp, line 578]kernel\qcoreapplication.cpp, line 578[/url] ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713523_448601.png)![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713534_796603.png)

QT中,如果要使用TCP协议实现文件传输功能,可以使用QNetworkAccessManager类吗,还是只能使用QTcpSocket和QTcpServer

QT中,如果要使用TCP协议实现文件传输功能,可以使用QNetworkAccessManager类吗,还是只能使用QTcpSocket和QTcpServer,QNetworkAccessManager建立连接是基于什么协议

tcp传输大文件的问题没传完就停止了。

用tcp传输大文件,每次发送1024个字节。得到文件大小除以1024得到要发送的次数。为什么还没发送到那么多次程序就终止了呢?

Qt5网络tcp协议,服务器发送文件,客户端接收文件,为什么客户端接收的文件大小是0kb

客户端: #include "client.h" #include "ui_client.h" #include <QDataStream> Client::Client(QWidget *parent) : QMainWindow(parent), ui(new Ui::Client) { ui->setupUi(this); //初始化创建的socket对象 msocket = new QTcpSocket(); recvsize = 0; filesize = 0; //连接服务器 QString ip = "192.168.199.93"; msocket->connectToHost(ip,6789); //连接固定的服务器 //接收服务器发来的数据 connect(msocket,SIGNAL(readyRead()),this,SLOT(read_data())); //当链接服务器成功的时候会发送connected信号,并向服务器发送接收到的文件名和文件大小 //connect(msocket, SIGNAL(connected()),this, SLOT(send_filename_size())); //成功接收一段数据会信号通知 connect(msocket,SIGNAL(bytesRead(qint64)),this, SLOT(send_file_content())); } Client::~Client() { delete ui; } //接收数据槽函数 void Client::read_data() { if(filesize == 0) //先接收文件名和文件大小 { //创建流对象与套接字绑定 QDataStream stream(msocket); QString name; stream.setVersion(QDataStream::Qt_5_4); stream>>filesize>>name; qDebug()<<filesize<<name; //设置进度条最大值 ui->progressBar->setMaximum(filesize); ui->progressBar->setValue(0); file.setFileName(name); int flag = file.open(QIODevice::WriteOnly); } else //接收内容 { if(recvsize < filesize) { qDebug()<<"1"; QByteArray array = msocket->readAll(); file.write(array); recvsize += array.size(); //设置进度条 ui->progressBar->setValue(recvsize); } if(recvsize == filesize) { file.close(); filesize = 0; recvsize = 0; msocket->close(); } } } 服务器: #include "server.h" #include "ui_server.h" #include <QDataStream> //数据流 Server::Server(QWidget *parent) : QMainWindow(parent), ui(new Ui::Server) { ui->setupUi(this); //初始化服务器对象 mserver = new QTcpServer(); //初始化客户端 msocket = new QTcpSocket(); //监听,需要ip地址和端口号 mserver->listen(QHostAddress::Any,6789); //定义固定的端口号 //关联新的客户端链接信号 connect(mserver,SIGNAL(newConnection()),this,SLOT(new_client())); } Server::~Server() { delete ui; } void Server::new_client() //证明有客户端已经连接成功 { qDebug()<<"新客户端链接"; msocket = mserver->nextPendingConnection(); msocket->write("hello"); } void Server::on_pushButton_2_clicked() //浏览文件按钮 { QString filepath = QFileDialog::getOpenFileName(this); ui->filepathEdit->setText(filepath); } void Server::on_pushButton_clicked() //发送按钮 { //先发送文件名和文件大小以及通知 //2.发送文件名, 文件大小 QString filepath = ui->filepathEdit->text(); QFileInfo info(filepath); //a.获取文件名 QString name = info.fileName(); //b.获取文件大小 quint64 size = info.size(); qDebug()<<name<<size; //输出文件名和文件大小 QByteArray array; //定义个数据流绑定array QDataStream stream(&array,QIODevice::WriteOnly); stream.setVersion(QDataStream::Qt_5_4); //把数据通过流形式存入到array中 stream<<size<<name; //打开文件 file.setFileName(filepath); bool flag = file.open(QIODevice::ReadOnly); if(!flag) { qDebug()<<"open fail"; return ; } //把发送字节数清空0 sendsize = 0; //设置进度条的最大值 ui->progressBar->setMaximum(size); //发送文件大小,文件名 msocket->write(array);//当对方收到数据后msocket会发送已经发送了多字节数据的信号 //成功发送一段数据会信号通知 connect(msocket,SIGNAL(bytesWritten(qint64)),this, SLOT(send_file_content())); } void Server::send_file_content() { //发送文件内容 if(file.isOpen()) //文件打开了,发送文件内容 { QByteArray array = file.read(SIZE); msocket->write(array); sendsize += array.size(); ui->progressBar->setValue(sendsize); qDebug()<<sendsize; if(file.atEnd()) { //关闭文件 file.close(); } } }

QT 多线程TCP通讯问题 程序异常退出

我在运行过一个网上下载的多线程服务器后,我自己写的单线程的客户端和服务端就不再连的上了, 我百度了一下说是可能是因为我多次调用了connectToHost,所以点击连接时程序会异常退出,但这个问题怎么解决呢?因为我现在是换了端口也连不上了。 错误提示我也没弄懂,这个函数在cpp里写了呀 ![图片说明](https://img-ask.csdn.net/upload/201908/23/1566529412_850530.png) 找到的解决方法说减少次数,可是我现在根本就连不上了。之前连的也不知道怎么删除。。。 ![图片说明](https://img-ask.csdn.net/upload/201908/23/1566528556_717591.png)

qt5.5 tcp服务器中文乱码

![图片说明](https://img-ask.csdn.net/upload/201605/25/1464149653_313929.jpg) 如图 我client发送部分代码是: void Widget::send() { QString ss="hello server你好,服务器!!!"; tcpSocket->write(ss.toStdString().c_str(),strlen(ss.toStdString().c_str())); //QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); //tcpSocket->write(ss.toUtf8()); // QString ss="hello server - 你好,服务器!!!"; // QByteArray dateSend = ss.toLocal8Bit(); // tcpSocket->write(dateSend); } server端接收: void Widget::dataReceived() { while(m_pSocket->bytesAvailable()) { QByteArray vTemp; //vTemp = vTemp.to vTemp = m_pSocket->readAll(); // QTextCodec *codeTransfor = QTextCodec::codecForName("GBK"); // QString vTempStr = codeTransfor->toUnicode(vTemp);//.mid(2)); QString vTempStr = QTextCodec::codecForName("GBK")->toUnicode(vTemp); QString vFinalStr = QTextCodec::codecForName("UTF-8")->fromUnicode(vTempStr); // QString vTempStr = QString::fromLocal8Bit(vTemp); //QString vTempStr(vTemp); //QString vTempStr = tr(vTemp.data()); m_pEdt_Info->append(vFinalStr); } }

Qt中TCP通信是,如何在服务端区分登录,注册,还是文件传输信息?

登录和注册是把数据封装进Json传输的。注册登录在Json中用标志位来区分的,但是文件就不知道怎区分了!网上找的一些传输文件的方法都不能封装进Json,那就没办法用标志位来判断了,跪求大神告知解决方法。

tcp大文件传输,全部write成功,read接收到部分后阻塞

tcp大文件传输,全部write成功,read接收到部分后阻塞。 小文件传输没问题。 ``` //传输数据结构体 typedef struct ResponeBody{ int packindex;//4 byte char type;//2 byte char status;//2 byte int datalen;//4 byte int datatotal;//4 byte char s_arg[24];//24 byte char data[SIZE_DATA]; }ResponeBody; ``` ``` //发送数据 while((num = read(fd, resp.data, SIZE_DATA)) > 0) { resp.type = getData; resp.status = 1; resp.datalen = num; res = my_write(socket, &resp, SIZE_RESP); if(res < 0){ return -1; } memset(&resp, 0, SIZE_RESP); } close(fd); ``` ``` //读取数据 int ret = -1; while(1){ num = read(socket, &resp, SIZE_RESP); if(num <= 0 || len_recv >= datatotal){ printf("get success\n"); ret = 0; break; } if(0 == resp.status || resp.type != getData){ ret = -1; break; } write(fd, resp.data, resp.datalen); len_recv += num-SIZE_INFO; printf("get ----[%2.2f%%]----\n", len_recv/(double)datatotal * 100); memset(&resp, 0, SIZE_RESP); } ```

qt中TCP客户端接收的所有数据都需要拆包与并包吗?

qt中TCP客户端接收的所有数据都需要拆包与并包吗?如果不是请问我想要同时接收有黏包和不黏包的数据应该怎么做?能具体到用代码写出来吗,谢谢各位大神了

qt怎样进行局域网语音传输

不知道怎样实现,用什么语音传输协议比较好,能在聊天室中可以使用,希望有什么代码可以参考一下

QT:文件传输长时间没反应

选择文件点击发送以后,进度条长时间不动 请问是哪里出问题 ![图片说明](https://img-ask.csdn.net/upload/202005/13/1589356251_269947.jpg) ![图片说明](https://img-ask.csdn.net/upload/202005/13/1589356315_272742.jpg) ``` widgt.cpp void Widget::hasPendingFile(QString userName,QString serverAddress, //接收文件 QString clientAddress,QString fileName) { QString ipAddress = getIP(); if(ipAddress == clientAddress) { int btn = QMessageBox::information(this,tr("接受文件"), tr("来自%1(%2)的文件:%3,是否接收?") .arg(userName).arg(serverAddress).arg(fileName), QMessageBox::Yes,QMessageBox::No); if(btn == QMessageBox::Yes) { QString name = QFileDialog::getSaveFileName(0,tr("保存文件"),fileName); if(!name.isEmpty()) { TcpClient *client = new TcpClient(this); client->setFileName(name); client->setHostAddress(QHostAddress(serverAddress)); client->show(); } } else{ sendMessage(Refuse,serverAddress); } } } void Widget::on_sendfile_clicked()//发送文件按钮槽函数 { if(ui->tableWidget->selectedItems().isEmpty()) { QMessageBox::warning(0,tr("选择用户"),tr("请先从用户列表选择要传送的用户!"),QMessageBox::Ok); return; } server->show(); server->initServer(); } tcpclient.cpp void TcpClient::readMessage() { QDataStream in(tcpClient); in.setVersion(QDataStream::Qt_4_6); float useTime = time.elapsed(); if(bytesReceived <= sizeof(qint64)*2){ if((tcpClient->bytesAvailable() >= sizeof(qint64)*2) && (fileNameSize == 0)){ in>>TotalBytes>>fileNameSize; bytesReceived += sizeof(qint64)*2; } if((tcpClient->bytesAvailable() >= fileNameSize) && (fileNameSize != 0)){ in>>fileName; bytesReceived +=fileNameSize; if(!localFile->open(QFile::WriteOnly)){ QMessageBox::warning(this,tr("应用程序"),tr("无法读取文件 %1:\n%2.").arg(fileName).arg(localFile->errorString())); return; } }else{ return; } } if(bytesReceived < TotalBytes){ bytesReceived += tcpClient->bytesAvailable(); inBlock = tcpClient->readAll(); localFile->write(inBlock); inBlock.resize(0); } ui->progressBar->setMaximum(TotalBytes); ui->progressBar->setValue(bytesReceived); qDebug()<<bytesReceived<<"received"<<TotalBytes; double speed = bytesReceived / useTime; ui->tcpClientStatusLabel->setText(tr("已接收 %1MB (%2MB/s) \n共%3MB 已用时:%4秒\n估计剩余时间:%5秒") .arg(bytesReceived / (1024*1024))//已接收 .arg(speed*1000/(1024*1024),0,'f',2)//速度 .arg(TotalBytes / (1024 * 1024))//总大小 .arg(useTime/1000,0,'f',0)//用时 .arg(TotalBytes/speed/1000 - useTime/1000,0,'f',0));//剩余时间 if(bytesReceived == TotalBytes) { tcpClient->close(); ui->tcpClientStatusLabel->setText(tr("接收文件 %1 完毕").arg(fileName)); localFile->close(); //接收完文件后,一定要关闭,不然可能出问题 } } tcpserver.cpp void TcpServer::sendMessage() //开始发送数据 { ui->serverSendBtn->setEnabled(false); clientConnection = tcpServer->nextPendingConnection(); connect(clientConnection,SIGNAL(bytesWritten(qint64)),SLOT(updateClientProgress(qint64))); ui->serverStatusLabel->setText(tr("开始传送文件 %1 !").arg(theFileName)); localFile = new QFile(fileName); if(!localFile->open((QFile::ReadOnly))){//以只读方式打开 QMessageBox::warning(this,tr("应用程序"),tr("无法读取文件 %1:\n%2").arg(fileName).arg(localFile->errorString())); return; } TotalBytes = localFile->size(); QDataStream sendOut(&outBlock,QIODevice::WriteOnly); sendOut.setVersion(QDataStream::Qt_4_6); time.start(); //开始计时 QString currentFile = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1); sendOut<<qint64(0)<<qint64(0)<<currentFile; TotalBytes += outBlock.size(); sendOut.device()->seek(0); sendOut<<TotalBytes<<qint64((outBlock.size()-sizeof(qint64)*2)); bytesToWrite = TotalBytes - clientConnection->write(outBlock); qDebug()<<currentFile<<TotalBytes; outBlock.resize(0); } void TcpServer::updateClientProgress(qint64 numBytes)//更新进度条 { bytesWritten += (int)numBytes; if(bytesToWrite > 0){ outBlock = localFile->read(qMin(bytesToWrite,loadSize)); bytesToWrite -= (int)clientConnection->write(outBlock); outBlock.resize(0); } else{ localFile->close(); } ui->progressBar->setMaximum(TotalBytes); ui->progressBar->setValue(bytesWritten); float useTime = time.elapsed(); double speed = bytesWritten / useTime; ui->serverStatusLabel->setText(tr("已发送 %1MB (%2MB/s) \n共%3MB 已用时:%4秒\n估计剩余时间:%5秒") .arg(bytesWritten / (1024*1024))//已发送 .arg(speed*1000/(1024*1024),0,'f',2)//速度 .arg(TotalBytes / (1024 * 1024))//总大小 .arg(useTime/1000,0,'f',0)//用时 .arg(TotalBytes/speed/1000 - useTime/1000,0,'f',0));//剩余时间 //num.sprintf("%.1f KB/s", (bytesWritten*1000) / (1024.0*time.elapsed())); if(bytesWritten == TotalBytes) ui->serverStatusLabel->setText(tr("传送文件 %1 成功").arg(theFileName)); } void TcpServer::on_serverOpenBtn_clicked() //打开 { fileName = QFileDialog::getOpenFileName(this); if(!fileName.isEmpty()) { theFileName = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1); ui->serverStatusLabel->setText(tr("要传送的文件为:%1 ").arg(theFileName)); ui->serverSendBtn->setEnabled(true); ui->serverOpenBtn->setEnabled(false); } } void TcpServer::refused() //被对方拒绝 { tcpServer->close(); ui->serverStatusLabel->setText(tr("对方拒绝接收!!!")); } void TcpServer::on_serverSendBtn_clicked() //发送 { if(!tcpServer->listen(QHostAddress::Any,tcpPort))//开始监听 { qDebug() << tcpServer->errorString(); close(); return; } ui->serverStatusLabel->setText(tr("等待对方接收... ...")); emit sendFileName(theFileName); } void TcpServer::on_serverCloseBtn_clicked()//退出 { if(tcpServer->isListening()) { tcpServer->close(); clientConnection->abort(); } this->close(); } void TcpServer::initServer()//初始化 { loadSize = 4*1024; TotalBytes = 0; bytesWritten = 0; bytesToWrite = 0; ui->serverStatusLabel->setText(tr("请选择要传送的文件")); ui->progressBar->reset(); ui->serverOpenBtn->setEnabled(true); ui->serverSendBtn->setEnabled(false); tcpServer->close(); } ```

QT开发实战精解5.3局域网聊天系统 文件传输时一直处于等待的状态

完全按照书本例子写的码,问题是传输文件时一直处于等待状态,无论是本机发往本机还是不同主机之间都不成功。不明白是哪里出问题,求大神解答!代码如下,如果觉得看起来麻烦可以问我要工程文件调试,感激不尽! ``` widget.cpp: #include "widget.h" #include "ui_widget.h" #include <QUdpSocket> #include <QHostInfo> #include <QMessageBox> #include <QScrollBar> #include <QDateTime> #include <QNetworkInterface> #include <QProcess> #include "tcpserver.h" #include "tcpclient.h" #include <QFileDialog> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); udpSocket = new QUdpSocket(this); port = 45454; udpSocket->bind(port, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint); connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams())); sendMessage(NewParticipant); server = new TcpServer(this); connect(server, SIGNAL(sendFileName(QString)), this, SLOT(getFileName(QString))); } Widget::~Widget() { delete ui; } // 使用UDP广播发送信息 void Widget::sendMessage(MessageType type, QString serverAddress) { QByteArray data; QDataStream out(&data, QIODevice::WriteOnly); QString localHostName = QHostInfo::localHostName(); QString address = getIP(); out << type << getUserName() << localHostName; switch(type) { case Message : if (ui->messageTextEdit->toPlainText() == "") { QMessageBox::warning(0,tr("警告"),tr("发送内容不能为空"),QMessageBox::Ok); return; } out << address << getMessage(); ui->messageBrowser->verticalScrollBar() ->setValue(ui->messageBrowser->verticalScrollBar()->maximum()); break; case NewParticipant : out << address; break; case ParticipantLeft : break; case FileName : { int row = ui->userTableWidget->currentRow(); QString clientAddress = ui->userTableWidget->item(row, 2)->text(); out << address << clientAddress << fileName; break; } case Refuse : out << serverAddress; break; } udpSocket->writeDatagram(data,data.length(),QHostAddress::Broadcast, port); } // 接收UDP信息 void Widget::processPendingDatagrams() { while(udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(datagram.data(), datagram.size()); QDataStream in(&datagram, QIODevice::ReadOnly); int messageType; in >> messageType; QString userName,localHostName,ipAddress,message; QString time = QDateTime::currentDateTime() .toString("yyyy-MM-dd hh:mm:ss"); switch(messageType) { case Message: in >> userName >> localHostName >> ipAddress >> message; ui->messageBrowser->setTextColor(Qt::blue); ui->messageBrowser->setCurrentFont(QFont("Times New Roman",12)); ui->messageBrowser->append("[ " +userName+" ] "+ time); ui->messageBrowser->append(message); break; case NewParticipant: in >>userName >>localHostName >>ipAddress; newParticipant(userName,localHostName,ipAddress); break; case ParticipantLeft: in >>userName >>localHostName; participantLeft(userName,localHostName,time); break; case FileName: { in >> userName >> localHostName >> ipAddress; QString clientAddress, fileName; in >> clientAddress >> fileName; hasPendingFile(userName, ipAddress, clientAddress, fileName); break; } case Refuse: { in >> userName >> localHostName; QString serverAddress; in >> serverAddress; QString ipAddress = getIP(); if(ipAddress == serverAddress) { server->refused(); } break; } } } } // 处理新用户加入 void Widget::newParticipant(QString userName, QString localHostName, QString ipAddress) { bool isEmpty = ui->userTableWidget->findItems(localHostName, Qt::MatchExactly).isEmpty(); if (isEmpty) { QTableWidgetItem *user = new QTableWidgetItem(userName); QTableWidgetItem *host = new QTableWidgetItem(localHostName); QTableWidgetItem *ip = new QTableWidgetItem(ipAddress); ui->userTableWidget->insertRow(0); ui->userTableWidget->setItem(0,0,user); ui->userTableWidget->setItem(0,1,host); ui->userTableWidget->setItem(0,2,ip); ui->messageBrowser->setTextColor(Qt::gray); ui->messageBrowser->setCurrentFont(QFont("Times New Roman",10)); ui->messageBrowser->append(tr("%1 在线!").arg(userName)); ui->userNumLabel->setText(tr("在线人数:%1").arg(ui->userTableWidget->rowCount())); sendMessage(NewParticipant); } } // 处理用户离开 void Widget::participantLeft(QString userName, QString localHostName, QString time) { int rowNum = ui->userTableWidget->findItems(localHostName, Qt::MatchExactly).first()->row(); ui->userTableWidget->removeRow(rowNum); ui->messageBrowser->setTextColor(Qt::gray); ui->messageBrowser->setCurrentFont(QFont("Times New Roman", 10)); ui->messageBrowser->append(tr("%1 于 %2 离开!").arg(userName).arg(time)); ui->userNumLabel->setText(tr("在线人数:%1").arg(ui->userTableWidget->rowCount())); } // 获取ip地址 QString Widget::getIP() { QList<QHostAddress> list = QNetworkInterface::allAddresses(); foreach (QHostAddress address, list) { if(address.protocol() == QAbstractSocket::IPv4Protocol) return address.toString(); } return 0; } // 获取用户名 QString Widget::getUserName() { QStringList envVariables; envVariables << "USERNAME.*" << "USER.*" << "USERDOMAIN.*" << "HOSTNAME.*" << "DOMAINNAME.*"; QStringList environment = QProcess::systemEnvironment(); foreach (QString string, envVariables) { int index = environment.indexOf(QRegExp(string)); if (index != -1) { QStringList stringList = environment.at(index).split('='); if (stringList.size() == 2) { return stringList.at(1); break; } } } return "unknown"; } // 获得要发送的消息 QString Widget::getMessage() { QString msg = ui->messageTextEdit->toHtml(); ui->messageTextEdit->clear(); ui->messageTextEdit->setFocus(); return msg; } // 发送消息 void Widget::on_sendButton_clicked() { sendMessage(Message); } // 获取要发送的文件名 void Widget::getFileName(QString name) { fileName = name; sendMessage(FileName); } // 传输文件按钮 void Widget::on_sendToolBtn_clicked() { if(ui->userTableWidget->selectedItems().isEmpty()) { QMessageBox::warning(0, tr("选择用户"), tr("请先从用户列表选择要传送的用户!"), QMessageBox::Ok); return; } server->show(); server->initServer(); } // 是否接收文件 void Widget::hasPendingFile(QString userName, QString serverAddress, QString clientAddress, QString fileName) { QString ipAddress = getIP(); if(ipAddress == clientAddress) { int btn = QMessageBox::information(this,tr("接受文件"), tr("来自%1(%2)的文件:%3,是否接收?") .arg(userName).arg(serverAddress).arg(fileName), QMessageBox::Yes,QMessageBox::No); if (btn == QMessageBox::Yes) { QString name = QFileDialog::getSaveFileName(0,tr("保存文件"),fileName); if(!name.isEmpty()) { TcpClient *client = new TcpClient(this); client->setFileName(name); client->setHostAddress(QHostAddress(serverAddress)); client->show(); } } else { sendMessage(Refuse, serverAddress); } } } tcpserver.cpp: #include "tcpserver.h" #include "ui_tcpserver.h" #include <QFile> #include <QTcpServer> #include <QTcpSocket> #include <QMessageBox> #include <QFileDialog> #include <QDebug> TcpServer::TcpServer(QWidget *parent) : QDialog(parent), ui(new Ui::TcpServer) { ui->setupUi(this); setFixedSize(350,180); tcpPort = 6666; tcpServer = new QTcpServer(this); connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendMessage())); initServer(); } TcpServer::~TcpServer() { delete ui; } // 初始化 void TcpServer::initServer() { payloadSize = 64*1024; TotalBytes = 0; bytesWritten = 0; bytesToWrite = 0; ui->serverStatusLabel->setText(tr("请选择要传送的文件")); ui->progressBar->reset(); ui->serverOpenBtn->setEnabled(true); ui->serverSendBtn->setEnabled(false); tcpServer->close(); } // 开始发送数据 void TcpServer::sendMessage() { ui->serverSendBtn->setEnabled(false); clientConnection = tcpServer->nextPendingConnection(); connect(clientConnection, SIGNAL(bytesWritten(qint64)), this, SLOT(updateClientProgress(qint64))); ui->serverStatusLabel->setText(tr("开始传送文件 %1 !").arg(theFileName)); localFile = new QFile(fileName); if(!localFile->open((QFile::ReadOnly))){ QMessageBox::warning(this, tr("应用程序"), tr("无法读取文件 %1:\n%2") .arg(fileName).arg(localFile->errorString())); return; } TotalBytes = localFile->size(); QDataStream sendOut(&outBlock, QIODevice::WriteOnly); sendOut.setVersion(QDataStream::Qt_4_7); time.start(); // 开始计时 QString currentFile = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1); sendOut << qint64(0) << qint64(0) << currentFile; TotalBytes += outBlock.size(); sendOut.device()->seek(0); sendOut << TotalBytes << qint64((outBlock.size() - sizeof(qint64)*2)); bytesToWrite = TotalBytes - clientConnection->write(outBlock); outBlock.resize(0); } // 更新进度条 void TcpServer::updateClientProgress(qint64 numBytes) { qApp->processEvents(); bytesWritten += (int)numBytes; if (bytesToWrite > 0) { outBlock = localFile->read(qMin(bytesToWrite, payloadSize)); bytesToWrite -= (int)clientConnection->write(outBlock); outBlock.resize(0); } else { localFile->close(); } ui->progressBar->setMaximum(TotalBytes); ui->progressBar->setValue(bytesWritten); float useTime = time.elapsed(); double speed = bytesWritten / useTime; ui->serverStatusLabel->setText(tr("已发送 %1MB (%2MB/s) " "\n共%3MB 已用时:%4秒\n估计剩余时间:%5秒") .arg(bytesWritten / (1024*1024)) .arg(speed*1000 / (1024*1024), 0, 'f', 2) .arg(TotalBytes / (1024 * 1024)) .arg(useTime/1000, 0, 'f', 0) .arg(TotalBytes/speed/1000 - useTime/1000, 0, 'f', 0)); if(bytesWritten == TotalBytes) { localFile->close(); tcpServer->close(); ui->serverStatusLabel->setText(tr("传送文件 %1 成功").arg(theFileName)); } } // 打开按钮 void TcpServer::on_serverOpenBtn_clicked() { fileName = QFileDialog::getOpenFileName(this); if(!fileName.isEmpty()) { theFileName = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1); ui->serverStatusLabel->setText(tr("要传送的文件为:%1 ").arg(theFileName)); ui->serverSendBtn->setEnabled(true); ui->serverOpenBtn->setEnabled(false); } } // 发送按钮 void TcpServer::on_serverSendBtn_clicked() { if(!tcpServer->listen(QHostAddress::Any,tcpPort))//开始监听 { qDebug() << tcpServer->errorString(); close(); return; } ui->serverStatusLabel->setText(tr("等待对方接收... ...")); emit sendFileName(theFileName); } // 关闭按钮 void TcpServer::on_serverCloseBtn_clicked() { if(tcpServer->isListening()) { tcpServer->close(); if (localFile->isOpen()) localFile->close(); clientConnection->abort(); } close(); } // 被对方拒绝 void TcpServer::refused() { tcpServer->close(); ui->serverStatusLabel->setText(tr("对方拒绝接收!!!")); } // 关闭事件 void TcpServer::closeEvent(QCloseEvent *) { on_serverCloseBtn_clicked(); } tcpclient.cpp #include "tcpclient.h" #include "ui_tcpclient.h" #include <QTcpSocket> #include <QDebug> #include <QMessageBox> TcpClient::TcpClient(QWidget *parent) : QDialog(parent), ui(new Ui::TcpClient) { ui->setupUi(this); setFixedSize(350,180); TotalBytes = 0; bytesReceived = 0; fileNameSize = 0; tcpClient = new QTcpSocket(this); tcpPort = 6666; connect(tcpClient, SIGNAL(readyRead()), this, SLOT(readMessage())); connect(tcpClient, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError))); } TcpClient::~TcpClient() { delete ui; } // 设置文件名 void TcpClient::setFileName(QString fileName) { localFile = new QFile(fileName); } // 设置地址 void TcpClient::setHostAddress(QHostAddress address) { hostAddress = address; newConnect(); } // 创建新连接 void TcpClient::newConnect() { blockSize = 0; tcpClient->abort(); tcpClient->connectToHost(hostAddress, tcpPort); time.start(); } // 读取数据 void TcpClient::readMessage() { QDataStream in(tcpClient); in.setVersion(QDataStream::Qt_4_7); float useTime = time.elapsed(); if (bytesReceived <= sizeof(qint64)*2) { if ((tcpClient->bytesAvailable() >= sizeof(qint64)*2) && (fileNameSize == 0)) { in>>TotalBytes>>fileNameSize; bytesReceived += sizeof(qint64)*2; } if((tcpClient->bytesAvailable() >= fileNameSize) && (fileNameSize != 0)){ in>>fileName; bytesReceived +=fileNameSize; if(!localFile->open(QFile::WriteOnly)){ QMessageBox::warning(this,tr("应用程序"),tr("无法读取文件 %1:\n%2.") .arg(fileName).arg(localFile->errorString())); return; } } else { return; } } if (bytesReceived < TotalBytes) { bytesReceived += tcpClient->bytesAvailable(); inBlock = tcpClient->readAll(); localFile->write(inBlock); inBlock.resize(0); } ui->progressBar->setMaximum(TotalBytes); ui->progressBar->setValue(bytesReceived); double speed = bytesReceived / useTime; ui->tcpClientStatusLabel->setText(tr("已接收 %1MB (%2MB/s) " "\n共%3MB 已用时:%4秒\n估计剩余时间:%5秒") .arg(bytesReceived / (1024*1024)) .arg(speed*1000/(1024*1024),0,'f',2) .arg(TotalBytes / (1024 * 1024)) .arg(useTime/1000,0,'f',0) .arg(TotalBytes/speed/1000 - useTime/1000,0,'f',0)); if(bytesReceived == TotalBytes) { localFile->close(); tcpClient->close(); ui->tcpClientStatusLabel->setText(tr("接收文件 %1 完毕") .arg(fileName)); } } // 错误处理 void TcpClient::displayError(QAbstractSocket::SocketError socketError) { switch(socketError) { case QAbstractSocket::RemoteHostClosedError : break; default : qDebug() << tcpClient->errorString(); } } // 取消按钮 void TcpClient::on_tcpClientCancleBtn_clicked() { tcpClient->abort(); if (localFile->isOpen()) localFile->close(); } // 关闭按钮 void TcpClient::on_tcpClientCloseBtn_clicked() { tcpClient->abort(); if (localFile->isOpen()) localFile->close(); close(); } // 关闭事件 void TcpClient::closeEvent(QCloseEvent *) { on_tcpClientCloseBtn_clicked(); } ``` ![图片说明](https://img-ask.csdn.net/upload/202005/14/1589465615_112914.jpg)

tcp传输端口的监听!!!

 Socket client = new Socket("127.0.0.1", 20006);  ServerSocket server = new ServerSocket(20006);  是客户先创建一个20006端口让服务器去监听,还是服务器提供20006的端口,客户端想要访问我就要通过20006端口。如果是客户端创建20006端口让服务器去监听,服务器是怎么得到信息知道它要去监听20006这个端口(因为tcp还没有建立连接/还是有其他的方法可以知道客户端发来的端口号)?

linux下c++实现服务端传输和客户端接受音频文件并播放

linux下c++如何编程实现服务器端的音频流信息向客户端的发送? 客服端又如何接收并播放音乐?

关于用QT写一个简单客户端与服务器,请问客户端如何获取服务器的文件目录?

客户端服务器通过局域网tcp连接,客户端该怎么把服务器的目录用treeview表示?而且速度尽量要快,要是在服务器把目录生成txt再发给客户端让客户端解析,文件多了会很慢吧?有什么好的方法吗?谢谢了。

qt udp通信接收速度。

有人测试过qt下 udp 最大接收速度能达到多少吗?需要保证不丢包。

TCP根据数据包头接收固定长度数据

用c++语言实现,tcp /ip接收数据,接收的方式是阻塞的,通过数据包头解析出数据整个的长度,假如包头是4个字节,如何遍历数据找到包头再去接收数据,,,求高手指导啊

android客户端与qt服务端通过socket通信传图片的问题

android客户端: public void sendData(final String filepath) { new Thread() { @Override public void run() { try { Socket socket = new Socket(); // Socket socket = new Socket("192.168.1.108", 8888);//创建Socket实例,并绑定连接远端IP地址和端口 socket.connect(new InetSocketAddress("192.168.1.108", 8888)); Log.i("线程反馈1", "创建成功!"); // DataOutputStream out = new DataOutputStream(socket.getOutputStream()); // out.writeUTF("Helloworld"); //获取输出流 OutputStream ou = socket.getOutputStream(); //读取服务器响应 BufferedReader bff = new BufferedReader(new InputStreamReader( socket.getInputStream())); String line = null; String buffer = ""; while ((line = bff.readLine()) != null) { buffer = line + buffer; } //向服务器发送文件 File file = new File(filepath); if (file.exists()) { FileInputStream fileInput = new FileInputStream(filepath); DataOutputStream dos = new DataOutputStream(ou); // 文件名 dos.writeUTF(file.getName()); byte[] bytes = new byte[1024]; int length = 0; while ((length = fileInput.read(bytes)) != -1) { dos.write(bytes, 0, length); } //告诉服务端,文件已传输完毕 socket.shutdownOutput(); fileInput.close(); dos.close(); } //关闭各种输入输出流 ou.flush(); // bff.close(); ou.close(); socket.close(); } catch (Exception e) { Log.i("线程反馈", "线程异常!"); } } }.start(); } qt服务端: void MainWindow::readMessage() { QByteArray array; quint32 data_len = 0; quint32 len = 0xffffffff; //struct Head head; while(m_tcpSocket->waitForReadyRead(5000)){ qDebug()<<"bytesAvailable"<<endl; if(data_len == 0){ QDataStream in(m_tcpSocket); in >> len; qDebug("datalen:%d",len); } data_len += m_tcpSocket->bytesAvailable(); array.append((QByteArray)m_tcpSocket->readAll()); qDebug()<<data_len<<endl; if(data_len == len){ qDebug()<<"ok,all bytes revd"<<endl; break; } } qDebug()<<array; qDebug("recvd len:%d",data_len); QPixmap picture; picture.loadFromData(array,"jpeg"); picture.save("F:/test/test.jpg","jpg",-1); } 是哪出了问题,传字符串还有反应,传图片一直没反应

TCP socket粘包的处理问题

我在处理从接收缓存区取出来的字符串时会发现有包处于残缺状态。我把完整的包都处理出来了,只是那些不完整包头和包尾。我该怎么去处理呢,是丢掉还是保存下来等下个缓存区中的数据过来再重新贴好呢?

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

广工操作系统课程设计(文档+代码+可执行文件)

实现作业调度(先来先服务)、进程调度功能(时间片轮转) 实现内存管理功能(连续分配)。 实现文件系统功能(选作) 这些功能要有机地连接起来

Only老K说-爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

apache-jmeter-5.1.1(Requires Java 8+).zip

。Apache JMeter 5.1.1 (Requires Java 8+),需要jdk8以上的版本。

数通HCNP中文理论全套教材.rar

内涵HCNP-IENP中文理论书-内文,

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

DDR5_Draft_Spec_Rev05c.pdf

DDR5 spec

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

相关热词 c#中如何设置提交按钮 c#帮助怎么用 c# 读取合并单元格的值 c#带阻程序 c# 替换span内容 c# rpc c#控制台点阵字输出 c#do while循环 c#调用dll多线程 c#找出两个集合不同的
立即提问