服务器端:

#include "sqlite.h"
#include "ui_sqlite.h"sqlite::sqlite(QWidget *parent): QWidget(parent), ui(new Ui::sqlite)
{this->te = new QTextEdit();this->hb1 = new QHBoxLayout();this->hb1->addWidget(this->te);this->setLayout(this->hb1);this->myser = new QTcpServer();this->myser->listen(QHostAddress::AnyIPv4,8888);connect(this->myser, &QTcpServer::newConnection, this, &sqlite::accept_cli);//ui->setupUi(this);//ui->tableView->adjustSize();
}sqlite::~sqlite()
{delete ui;
}//通过歌名查找歌曲data,并返回路径
QString sqlite::search_name_data(QString Music_Name)
{QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("C:\\QT\\QTobj\\sqlite3\\youmi.db");if(db.open()){QSqlQuery *query = new QSqlQuery();QString sql = "select Music_Data from library where Music_Name = \'";sql += Music_Name;sql += "\'";query->prepare(sql);query->exec();query->first();qDebug() << query->value(0);QString arr = query->value(0).toString();//ui->lineEdit_search_pass_ret->setText(query->value(0).toString());db.close();return arr;}db.removeDatabase("C:\\QT\\QTobj\\sqlite3\\youmi.db");
}int sqlite::id_search_password(QString use_id )
{QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("C:\\QT\\QTobj\\sqlite3\\youmi.db");if(db.open()){QSqlQuery *query = new QSqlQuery();QString sql = "select use_password from use_info where use_id = \'";sql += use_id;sql += "\'";query->prepare(sql);query->exec();int initialPos = query->at();int pos = 0;if (query->last()){pos = query->at() + 1;}else{pos = 0;}query->seek(initialPos);qDebug() << pos;query->first();//qDebug() << "*********";//qDebug() << query->value(0);//qDebug() << "*********";if(1 == pos){qDebug() << "账号已存在";return 1;}//ui->lineEdit_search_pass_ret->setText(query->value(0).toString());if(0 == pos){qDebug() << "账号不存在";return 2;}db.close();}db.removeDatabase("C:\\QT\\QTobj\\sqlite3\\youmi.db");
}
int sqlite::uid_clicked(QString id, QString password)
{QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("C:\\QT\\QTobj\\sqlite3\\youmi.db");if(db.open()){QSqlQuery *query = new QSqlQuery();QString sql = "select use_password from use_info where use_id = ";sql += id;query->prepare(sql);query->exec();//query->first();//qDebug() << query->value(0);//qDebug() << query->value(1);if(query->first()){qDebug() << query->value(0);te->setText(query->value(0).toString());if(password == query->value(0)){//int b = 2;//qDebug() << "密码正确";return 2;}//qDebug() << "密码错误";//int a = 1;return 1;}//ui->lineEdit_uname->setText(query->value(0).toString());//ui->lineEdit_search_pass_ret->setText(query->value(1).toString());db.close();}db.removeDatabase("C:\\QT\\QTobj\\sqlite3\\youmi.db");
}void sqlite::on_search_clicked()
{QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("C:\\QT\\QTobj\\sqlite3\\youmi.db");if(db.open()){QSqlQueryModel *myquerymodel = new QSqlQueryModel();myquerymodel->setQuery("select * from use_info;",db);ui->tableView->setModel(myquerymodel);qDebug() << db.lastError();qDebug() << myquerymodel->lastError();db.close();}db.removeDatabase("C:\\QT\\QTobj\\sqlite3\\youmi.db");
}void sqlite::on_insert_clicked(QString use_id, QString use_password)
{/*if(ui->use_id->text().isEmpty() || ui->use_password->text().isEmpty()){QMessageBox::warning(this, tr("错误信息:"),tr("数据不完整"));return;}else{*/QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("C:\\QT\\QTobj\\sqlite3\\youmi.db");if(db.open()){QSqlQuery *query = new QSqlQuery();QString sql = "insert into use_info values(";sql += use_id;sql += ",\'";sql += use_password;sql += "\');";query->prepare(sql);query->exec();db.close();}db.removeDatabase("C:\\QT\\QTobj\\sqlite3\\youmi.db");//}
}void sqlite::on_delete_2_clicked()
{if(ui->use_id->text().isEmpty()){QMessageBox::warning(this, tr("错误信息:"),tr("数据不完整"));return;}else{QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("C:\\QT\\QTobj\\sqlite3\\youmi.db");if(db.open()){QSqlQuery *query = new QSqlQuery();QString sql = "Delete from use_info where use_id = '\'";sql += ui->use_id->text();query->prepare(sql);query->exec();db.close();}db.removeDatabase("C:\\QT\\QTobj\\sqlite3\\youmi.db");}
}void sqlite::on_change_clicked()
{if(ui->use_id->text().isEmpty() || ui->use_password->text().isEmpty()){QMessageBox::warning(this, tr("错误信息:"),tr("数据不完整"));return;}else{QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("C:\\QT\\QTobj\\sqlite3\\youmi.db");if(db.open()){QSqlQuery *query = new QSqlQuery();QString sql = "update use_info set use_password =\'";sql += ui->use_password->text();sql += "\' where use_id = ";sql += ui->use_id->text();query->prepare(sql);query->exec();db.close();}db.removeDatabase("C:\\QT\\QTobj\\sqlite3\\youmi.db");}}void sqlite::accept_cli()
{QTcpSocket *mycli = this->myser->nextPendingConnection();this->myclis.append(mycli);QString peer_ip = mycli->peerAddress().toString();QString peer_port = QString::number(mycli->peerPort());connect(mycli, &QTcpSocket::readyRead, this, &sqlite::do_work);connect(mycli, &QTcpSocket::errorOccurred, this, &::sqlite::close_comm_socket);this->te->append("客户端:"+peer_ip+":"+peer_port+"上线...");
}
void sqlite::do_work()
{QTcpSocket *peer = dynamic_cast<QTcpSocket *>(sender());QByteArray con = peer->readAll();QString *scon = new QString(con);QString peer_ip = peer->peerAddress().toString();QString peer_port = QString::number(peer->peerPort());QString all_con = peer_ip+":"+peer_port+":"+(*scon);this->te->append(all_con);for(int i = 0; i < myclis.size(); i++){if(myclis[i] != peer){myclis[i]->write(all_con.toUtf8());//ui->setupUi(this);//ui->tableView->adjustSize();}}qDebug() << all_con ;//QString a = all_con.mid(0,16);QString b = all_con.mid(16);QString id = b.mid(3,4);QString pass = b.mid(7);QString c = b.mid(0,3);qDebug() << c ;qDebug() << id;qDebug() << pass;QString dl_cg = "dlcg";QString dl_sb = "dlsb";QString zc_cg = "zccg";QString zc_sb = "zcsb";if(c == "log"){qDebug() << "欢迎来到悠米音乐" ;//qDebug() << uid_clicked(id,pass);//uid_clicked(id,pass);if(uid_clicked(id,pass) == 2){peer->write(dl_cg.toUtf8());qDebug() << peer->write(dl_cg.toUtf8());qDebug() << "hhhh";}else{peer->write(dl_sb.toUtf8());qDebug() << peer->write(dl_sb.toUtf8());qDebug() << "xxxx";}}else if(c == "reg"){qDebug() << "欢迎来到悠米音乐注册界面" ;int row = id_search_password(id);//qDebug() << id_search_password(id);if(row == 2){on_insert_clicked(id, pass);peer->write(zc_cg.toUtf8());//qDebug() << peer->write(zc_cg.toUtf8());}else if(row == 1){//账号已存在peer->write(zc_sb.toUtf8());qDebug() << peer->write(zc_sb.toUtf8());}}else if(c == "sog"){//接受用户发来的音乐名字qDebug() << "搜索歌曲";qDebug() << id;QString ret = search_name_data(id);qDebug() << ret;peer->write(ret.toUtf8());}
}void sqlite::close_comm_socket(QAbstractSocket::SocketError socketError)
{if(QAbstractSocket::RemoteHostClosedError == socketError){QTcpSocket *peer = dynamic_cast<QTcpSocket *>(sender());QString peer_ip = peer->peerAddress().toString();QString peer_port = QString::number(peer->peerPort());this->te->append(peer_ip+":"+peer_port+"用户已下线...");peer->close();}
}

客户端

app:
#include "myapp.h"
#include "ui_home.h"myapp::myapp(QObject *parent): QObject{parent}
{this->net = new  network();this->net->show();this->log_ui = new login();this->Zreg = new reg();this->he = new home();connect(this->net, &network::sig_network, this, &myapp::do_network);connect(this->log_ui,&login::sig_reg,this,&myapp::do_reg);connect(this->log_ui,&login::send_log_ser,this,&myapp::send_log_to_ser);connect(this->Zreg,&reg::send_reg_ser,this,&myapp::send_reg_to_ser);connect(this->net->sck, &QTcpSocket::readyRead, this, &myapp::read_msg_from_ser);   connect(this->he,&home::send_myapp,this,&myapp::send_music_ser);connect(this,&myapp::send_to_home,this->he,&home::path_from_myapp);}void myapp::do_network()
{this->log_ui->show();this->net->hide();
}void myapp::do_reg()
{this->Zreg->show();this->log_ui->hide();
}void myapp::send_music_ser()
{this->net->sck->write(this->he->ui->souge->text().toUtf8());//qDebug() << this->he->ui->souge->text();//为啥输入两次
}void myapp::send_log_to_ser()
{this->net->sck->write(this->log_ui->le_id->text().toUtf8());this->net->sck->write(this->log_ui->le_password->text().toUtf8());
}
void myapp::send_reg_to_ser()
{this->net->sck->write(this->Zreg->le_id->text().toUtf8());this->net->sck->write(this->Zreg->le_password->text().toUtf8());
}
void myapp::read_msg_from_ser()
{QByteArray con = this->net->sck->readAll();scon = new QString(con);mylist = this->scon->split("\\");for(int i =0; i< this->mylist.size();i++ ){qDebug()<<mylist[i];}//this->log_ui->te->append(QString(con));//this->Zreg->te->append(QString(con));qDebug() << con;this->str1 = new QTextEdit();this->str2 = new QTextEdit();this->str3 = new QTextEdit();this->str4 = new QTextEdit();this->str5 = new QTextEdit();this->str6 = new QTextEdit();this->str1->setText("dlcgdlcg");this->str2->setText("dlsbdlsb");this->str3->setText("zccg");this->str4->setText("zcsb");this->str5->setText("C:");//qDebug() << this->str1->toPlainText();if(mylist[0] == str1->toPlainText()){//发射信号界面跳转到悠米app主界面qDebug() << "登陆成功";//this->log_ui->te->clear();app_dl_cg();}else if(mylist[0] == str2->toPlainText()){//this->log_ui->te->append(QString(con));QString dl_sb = "登陆失败:账号或者密码错误,请重新输入";this->log_ui->te->append(dl_sb);        }else if(mylist[0] == str3->toPlainText()){qDebug() << "注册成功";this->log_ui->show();this->Zreg->close();//this->log_ui->te->clear();//发射信号界面跳转到悠米登陆界面//emit();}else if(mylist[0] == str4->toPlainText()){//this->log_ui->te->clear();QString zc_sb = "注册失败:账号已存在,请重新输入";this->Zreg->te->append(zc_sb);//his->log_ui->te->clear();qDebug() << "注册失败";}else if(mylist[0] == str5->toPlainText()){qDebug() <<"路径";//str6->append(QString(con));this->he->te->append(QString(con));emit send_to_home(QString(con));/*emit souge_path(str6->toPlainText());path_ser();qDebug() << str6->toPlainText();QStringList temp = QFileDialog::getOpenFileNames(this, tr("选择多媒体文件"),\tr("E:\\work\\备课\\work\\22051qt\\影音"),\tr("(*.mp3)"));this->mylist.append(temp);this->lw->clear();this->lw->addItems(this->mylist);*/}
}
/*void myapp::path_ser(QTextEdit str6)
{emit souge_path(str6->toPlainText());
}*/
void myapp::app_dl_cg()
{emit dl_cg();this->he->show();this->log_ui->close();
}network:
#include "network.h"
#include "ui_network.h"network::network(QWidget *parent): QWidget(parent), ui(new Ui::network)
{ui->setupUi(this);this->init_ui();this->sck = new QTcpSocket();connect(this->bnt_connect, &QPushButton::clicked, this, &network::on_pushButton_clicked);
}network::~network()
{delete ui;
}void network::init_ui()
{this->setFixedSize(QSize(350,500));this->setWindowTitle(tr("悠米音乐"));this->setWindowIcon(QIcon(":/src/img/6.jpg"));this->bnt_connect = new QPushButton(tr("跳过广告"));//this->bnt_connect->setFixedSize(QSize(75,40));this->lb_ip = new QLabel("服务器IP地址:");this->lb_port = new QLabel("服务器端口号:");this->le_ip = new QLineEdit("127.0.0.1");this->le_port = new QLineEdit("8888");this->le_Jump = new QLineEdit("跳转");}void network::on_pushButton_clicked()
{emit sig_network();this->sck->connectToHost(QHostAddress(this->le_ip->text()),this->le_port->text().toInt());
}登陆:
#include "login.h"login::login(QWidget *parent): QWidget{parent}
{this->init_ui();connect(this->bnt_reg, &QPushButton::clicked, this, &login::do_reg);//connect(this->bnt_login, &QPushButton::clicked, this, &login::send_ld);//connect(this->sck, &QTcpSocket::readyRead, this, &login::read_msg_from_ser);connect(this->bnt_login,&QPushButton::clicked,this,&login::send_ld);}
login::~login()
{}/*void login::log_ui()
{QString title = "用户欢迎使用七一在线餐厅!";this->setWindowTitle(title);
}*/void login::init_ui()
{this->setFixedSize(QSize(320,150));this->setWindowTitle(tr("悠米音乐"));this->setWindowIcon(QIcon(":/src/img/6.jpg"));this->te = new QTextEdit();this->lb_id = new QLabel(tr("账号:"));this->lb_password = new QLabel(tr("密码:"));this->le_id = new QLineEdit();this->le_password = new QLineEdit();this->le_id->setMaxLength(7);this->le_password->setMaxLength(4);this->le_password->setEchoMode(QLineEdit::Password);this->le_id->setText("log1234");this->le_password->setText("1234");this->bnt_login = new QPushButton(tr("登录"));this->bnt_reg = new QPushButton(tr("注册"));this->hb1 = new QHBoxLayout();this->hb2 = new QHBoxLayout();this->hb3 = new QHBoxLayout();this->hb4 = new QHBoxLayout();this->vb1 = new QVBoxLayout();this->hb1->addWidget(this->te);this->hb2->addWidget(this->lb_id);this->hb2->addWidget(this->le_id);this->hb3->addWidget(this->lb_password);this->hb3->addWidget(this->le_password);this->hb4->addWidget(this->bnt_login);this->hb4->addWidget(this->bnt_reg);this->vb1->addLayout(this->hb1);this->vb1->addLayout(this->hb2);this->vb1->addLayout(this->hb3);this->vb1->addLayout(this->hb4);this->setLayout(this->vb1);
}void login::do_reg()
{emit sig_reg();
}void login::send_ld()
{emit send_log_ser();//this->sck->write(this->le_id->text().toUtf8());//this->sck->write(this->le_password->text().toUtf8());
}/*void login::read_msg_from_ser()
{QByteArray con = this->sck->readAll();   this->te->append(QString(con));qDebug() << con;if(con == "dlcg"){//发射信号界面跳转到悠米app主界面//emit();}else if(con == "dlsb"){QString dl_sb = "登陆失败:账号或者密码错误,请重新输入";this->te->append(dl_sb);}
}*/
注册:
#include "reg.h"reg::reg(QWidget *parent): QWidget{parent}
{this->init_ui();connect(this->bnt_reg,&QPushButton::clicked,this,&reg::send_sig_to_app);}void reg::init_ui()
{this->setFixedSize(QSize(320,150));this->setWindowTitle(tr("悠米音乐"));this->setWindowIcon(QIcon(":/src/img/6.jpg"));this->te = new QTextEdit();this->lb_id = new QLabel(tr("账号:"));this->lb_pass = new QLabel(tr("密码:"));this->lb_password = new QLabel(tr("确认密码:"));this->le_id = new QLineEdit();this->le_id->setFixedSize(QSize(230,15));this->le_pass = new QLineEdit();this->le_pass->setFixedSize(QSize(230,15));this->le_password = new QLineEdit();this->le_password->setFixedSize(QSize(230,15));this->le_id->setMaxLength(7);this->le_pass->setMaxLength(4);this->le_password->setMaxLength(4);this->le_pass->setEchoMode(QLineEdit::Password);this->le_password->setEchoMode(QLineEdit::Password);this->le_id->setText("reg1212");this->le_pass->setText("5678");this->le_password->setText("5678");this->bnt_reg = new QPushButton(tr("注册"));this->hb1 = new QHBoxLayout();this->hb2 = new QHBoxLayout();this->hb3 = new QHBoxLayout();this->hb4 = new QHBoxLayout();this->hb5 = new QHBoxLayout();this->vb1 = new QVBoxLayout();this->hb1->addWidget(this->te);this->hb2->addWidget(this->lb_id);this->hb2->addWidget(this->le_id);this->hb3->addWidget(this->lb_pass);this->hb3->addWidget(this->le_pass);this->hb4->addWidget(this->lb_password);this->hb4->addWidget(this->le_password);this->hb5->addWidget(this->bnt_reg);this->vb1->addLayout(this->hb1);this->vb1->addLayout(this->hb2);this->vb1->addLayout(this->hb3);this->vb1->addLayout(this->hb4);this->vb1->addLayout(this->hb5);this->setLayout(this->vb1);
}void reg::send_sig_to_app()
{/*qDebug() << le_pass->text();qDebug() << le_password->text();*/if(this->le_pass->text() != this->le_password->text()){QMessageBox::warning(this,tr("提示信息!"),tr("密码不一致请重新输入"));}else{emit send_reg_ser();}
}功能
#include "home.h"
#include "ui_home.h"home::home(QWidget *parent) :QWidget(parent),ui(new Ui::home)
{ui->setupUi(this);this->init_ui();this->mylist.clear();this->myplayer = new QMediaPlayer();this->audio_output = new QAudioOutput();this->myplayer->setAudioOutput(this->audio_output);this->play_stat = 0;//connect(ui->pushButton_8,&QPushButton::clicked,this,&home::on_pushButton_8_clicked);connect(ui->pushButton_4, &QPushButton::clicked, this, &home::play_src);//connect(ui->pushButton_4, &QPushButton::clicked, this, &home::sig_pause);connect(ui->pushButton_4, &QPushButton::clicked, this, &home::sig_play);connect(ui->listWidget_2, &QListWidget::itemDoubleClicked, this, &home::play_cur_item);connect(this->myplayer, &QMediaPlayer::durationChanged, this, &home::change_cur_all_time);connect(this->myplayer, &QMediaPlayer::positionChanged, this, &home::update_time);}home::~home()
{delete ui;
}void home::init_ui()
{this->setWindowTitle(tr("悠米音乐"));this->setWindowIcon(QIcon(":/src/img/6.jpg"));this->te = new QTextEdit();//qDebug() << te;
}
/*void home::sig_pause()
{this->play_stat = 0;
}*/
void home::sig_play()
{//this->play_stat = 0;//this->myplayer->pause();if(this->play_stat == 1){this->myplayer->pause();this->play_stat = 2;}
}
void home::on_pushButton_8_clicked()
{emit send_myapp();
}void home::path_from_myapp(QString (con))
{qDebug() << "****";qDebug() << con;//this->te->toPlainText();//qDebug() << this->te->toPlainText();QStringList temp = QFileDialog::getOpenFileNames(this, tr("选择多媒体文件"),\con,\tr("多媒体文件 (*.mp3)"));this->mylist.append(temp);ui->listWidget_2->clear();ui->listWidget_2->addItems(this->mylist);
}void home::play_cur_item()
{QString filename = ui->listWidget_2->currentItem()->text();this->myplayer->setSource(QUrl(filename));this->myplayer->play();
}void home::change_cur_all_time()
{this->cur_all_time.clear();qint64 d = this->myplayer->duration();ui->horizontalSlider_2->setRange(0,d);int as = d / 1000;int h = as / 3600;int m = (as % 3600) / 60;int s = (as % 3600) % 60;QString tim = "00:00:00/";this->cur_all_time += QString::number(h);this->cur_all_time += ":";this->cur_all_time += QString::number(m);this->cur_all_time += ":";this->cur_all_time += QString::number(s);ui->label_3->setText(tim+this->cur_all_time);
}void home::update_time()
{qint64 d = this->myplayer->position();ui->horizontalSlider_2->setValue(d);int as = d / 1000;int h = as / 3600;int m = (as % 3600) / 60;int s = (as % 3600) % 60;QString cur_time;cur_time += QString::number(h);cur_time += ":";cur_time += QString::number(m);cur_time += ":";cur_time += QString::number(s);ui->label_3->setText(cur_time+"/"+this->cur_all_time);
}void home::change_volum()
{this->audio_output->setVolume(ui->horizontalSlider->value());//this->lb_volum_count->setText(QString::number(ui->horizontalSlider->value())+"/100");
}void home::play_src()
{if(ui->listWidget_2->count() > 0){if(ui->listWidget_2->currentRow() < 0){QMessageBox::warning(this,tr("提示信息:"),tr("没有选择播放资源!"));return;}QString fn = ui->listWidget_2->currentItem()->text();QFileInfo *fi = new QFileInfo(fn);qDebug() << "----";if(fi->isDir()){QMessageBox::warning(this,tr("提示信息:"),tr("没有选择正确的播放资源!"));return;}else if(fi->fileName().endsWith(".mp3")){if(this->play_stat == 0){this->play_cur_item();}/*else if(this->play_stat == 1){this->myplayer->play();this->myplayer->pause();}*/else{this->myplayer->play();this->play_stat = 1;}}else{QMessageBox::warning(this,tr("提示信息:"),tr("没有选择正确的播放资源!"));return;}}else{QMessageBox::warning(this,tr("提示信息:"),tr("资源列表为空!"));}
}

qt基于socket和sqlite3制作的登陆注册相关推荐

  1. html css实现登录注册页面,基于HTML5+css+JS_的精美登陆注册界面

    [实例简介] 基于HTML5+css+JS的精美登陆注册界面------------------------------- [实例截图] [核心代码] login4 ├── index.html ├─ ...

  2. linux网络通信移植,基于socket API的C/S通信:将Qt程序从Linux移植到windows

    Qt是一个跨平台的GUI开发语言,它是对C++在图形设计方面上的一种扩充.Qt本身包含一系列用来设计图形界面的类,并且对C++原有的类都进行了再次封装.如果你的程序采用Qt的类库,那么源程序在不同平台 ...

  3. 基于Qt的音乐播放器制作

    基于Qt的音乐播放器制作 使用浏览器自带工具抓包歌曲资源 开发人员工具抓包 点击浏览器右上角的 "-" 快捷键(Alt + F): 点击其中的"更多工具" ➡ ...

  4. c++使用OpenSSL基于socket实现tcp双向认证ssl(使用TSL协议)代码实现

    相信各位对OpenSSL库已经不陌生了,目前笔者使用这个库实现了RSA.AES加解密和tcp的双向认证功能,下面来看tcp的双向认证. 1.什么是双向认证 简单说双向认证就是:客户端认证服务端是否合法 ...

  5. Qt基于QGraphicsObject自定义图元并实现简单的动画

    文章目录 Qt基于QGraphicsObject自定义图元并实现简单的动画 举例; Qt基于QGraphicsObject自定义图元并实现简单的动画 Qt 图形的绘制 可以是QPainter方法直接绘 ...

  6. 2Python全栈之路系列之基于socket实现聊天机器人

    Python全栈之路系列之基于socket实现聊天机器人 通过socket实现局域网内的聊天工具. service.py文件如下: #!/usr/bin/env python # _*_ coding ...

  7. Python多人聊天室-基于socket UDP协议

    简介 使用Python编写的基于socket UDP通信的多功能即时聊天室,包含Tkinter编写的图形化聊天界面,功能包括有账号注册和登录,登录成功后可以查看在线用户,并和聊天室内的其他在线用户聊天 ...

  8. 基于Socket的简易聊天工具

    文章目录 基于Socket的简易聊天工具 简易聊天工具的功能: 项目设计 1.界面设计 2.类的设计 程序编写 1.ChatServer 2.ChatFrame 窗体的设计 1.ChatFrame的窗 ...

  9. 基于mysql镜像,制作符合要求的mysql镜像

    基于mysql镜像,制作符合要求的mysql镜像 由于拉取的mysql镜像,其编码默认是latin,而gogs要求是utf8,因此,需要修改编码,制作新镜像,步骤如下: 1. 得到mysql的配置文件 ...

最新文章

  1. 变换为json类型却遭遇乱码\u516c\u5f00\u65e5\u671f
  2. 「JupyterNotebook」Linux下安装Anaconda3以及后续打开jupyter notebook
  3. Git的commit之后的撤销revert
  4. 【转】 看IT人才最容易犯的17个错误
  5. 2020华为软挑成渝赛区初赛复赛方案分享
  6. gx works2产品id_gx works2中文版下载|
  7. Linux下使用shell脚本实现自动升级
  8. linux7找回删除的文件,centos7 rm -rf 删除文件的找回
  9. Strom 消息可靠性保障机制和Ack原理
  10. 解决win10计算机管理中没有本地用户和组
  11. Redmi 游戏电视 X Pro 评测
  12. Web服务器群集——LVS-DR+Keepalived高可用集群
  13. 机器学习中的三种误差
  14. python 多版本共存
  15. Liquibase学习4 - 管理changelog
  16. 每日一练-1-AD和中望CAD
  17. 基于Java的Minecraft游戏后端自定义插件 的Java实践项目整理
  18. 使用云效 修改 layui 环境变量
  19. 系统集成15真题解析
  20. loadrunner的TPS和点击率HPS

热门文章

  1. 2021-08-25 多模态反讽识别系列文章阅读(二)
  2. 地狱一问:你真的需要K8S吗?
  3. oracle如何查询权限,Oracle 权限查询
  4. 力学应用计算机实例,PART 5 相图计算机计算 相图计算与 及扩散动力学模拟及其应用实例.ppt...
  5. 给年后准备跳槽的提个醒!
  6. 三分钟教会你自制 iconFont 字体图标库
  7. linux忘记密码解决办法
  8. FutureWarning
  9. 申请ISO9001质量管理体系认证有5个程序
  10. 【笔记】大数据技术之你需要了解的常识(一)