此版本运用了TCP-IP通信协议,以及数据库的运用,首先进行服务器与客户端的连接,其次,进行注册,将内容注册到数据库中登陆也是通过数据库进行操作,其中还涉及套接字的运用,暂时只是进行到了服务器与客户端的通信,下一个版本将继续完善,实现多个客户端同时在线通信的操作
以下是项目源码
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpServer> //监听套接字
#include <QTcpSocket> //通信套接字
#include <QString>
struct client{
int flag;
char name[20];
int num;
int password;
char word[1000];
};
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
client b;
private slots:
//void on_buttonsend_clicked();
//void on_buttonclose_clicked();
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
QTcpServer *tcpserver;//监听套接字
QTcpSocket *tcpsocket;//通信套接字
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QTextCodec>
#include <QMessageBox>
#include <QtSql/QSqlDatabase>
#include <QSqlQuery>
#include <QSql>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());//设置显示中文
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("room");
db.setPort(3306);
if(!db.open())
{
QMessageBox::warning(this,"警告","数据库打开失败");
}
else
{
qDebug()<<"数据库打开成功";
}
//QString str = QString("create table chatting(name varchar(32), num int, password int);");
//QSqlQuery query;
//query.exec(str);
tcpserver = NULL;
tcpsocket = NULL;
//监听套接字,指定父对象,让其自动回收空间