多人聊天室代码
多人聊天室 server.c代码
#include "server_test.h"
#include "ui_server_test.h"
#include <QTcpSocket>
#include <QTcpServer>
server_test::server_test(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::server_test)
{
ui->setupUi(this);
ui->sip->setText("127.0.0.1");
ui->sport->setText("9999");
startServer();
}
server_test::~server_test()
{
delete ui;
}
void server_test::startServer()
{
m_server = new QTcpServer(this);
m_server->listen(QHostAddress(ui->sip->text()),ui->sport->text().toInt());
connect(m_server,SIGNAL(newConnection()),this,SLOT(slot_newConnection()));
}
void server_test::slot_newConnection()
{
// 把新加入的socket放入链表中
QTcpSocket* socket = m_server->nextPendingConnection();
ui->textEdit->append(socket->peerAddress().toString()+"down"+"\n");
m_sockets.push_back(socket);
connect(socket,SIGNAL(readyRead()),this,SLOT(slot_readMessage()));
connect(socket,SIGNAL(disconnected()),this,SLOT(slot_disconnect()));
}
void server_test::slot_readMessage()
{
QTcpSocket* socket = (QTcpSocket*)QObject::sender(); // 获得是哪个socket收到了消息
QString str = socket->readAll().data();
for(int i=0; i<m_sockets.size(); i++)
{
if(m_sockets[i] != socket)
m_sockets[i]->write(str.toStdString().data());
}
}
void server_test::slot_disconnect()
{
QTcpSocket* socket = (QTcpSocket*)QObject::sender(); // 获得是哪个socket收到了消息
ui->textEdit->append(socket->peerAddress().toString()+"up"+"\n");
}
多人聊天室 server.h
```javascript
#ifndef SERVER_TEST_H
#define SERVER_TEST_H
#include <QMainWindow>
#include <QTcpSocket>
#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress>
namespace Ui {
class server_test;
}
class server_test : public QMainWindow
{
Q_OBJECT
public:
explicit server_test(QWidget *parent = 0);
~server_test();
QTcpServer* m_server;
QTcpSocket* m_socket; // 客户端套接字
void connectToServer(); // 连接到服务器
QList<QTcpSocket*> m_sockets; // 连接到server的所有客户. 链表方式, 在服务器端的一个备份(客户端的socket)
void startServer(); // 启动一个server
public slots:
void slot_newConnection(); // 对应客户端的 connectToHost();
void slot_readMessage(); // 每一个socket绑定
void slot_disconnect();
private:
Ui::server_test *ui;
};
#endif // SERVER_TEST_H
#多人聊天室 client.c
#include "client_test.h"
#include "ui_client_test.h"
client_test::client_test(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::client_test)
{
ui->setupUi(this);
connectToServer();
}
client_test::~client_test()
{
delete ui;
}
void client_test::connectToServer()
{
m_socket = new QTcpSocket(this);
m_socket->connectToHost(QHostAddress::LocalHost, 9999);
connect(m_socket,SIGNAL(readyRead()),this,SLOT(slot_readMessage())); // 告诉socket, 要用slot_readMessage()去处理接收的消息.
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(slot_btnSendMsg()));
}
void client_test::slot_readMessage()
{
QString str = m_socket->readAll().data();
ui->textEdit->append(m_socket->peerAddress().toString()+":" + str+ "\n");
}
void client_test::slot_btnSendMsg()
{
QString str = ui->textEdit_2->toPlainText();
m_socket->write(str.toUtf8()); // Exception
ui->textEdit->append("me say:"+ str.toUtf8());
ui->textEdit_2->clear();
}
#多人聊天室 client.h
#ifndef CLIENT_TEST_H
#define CLIENT_TEST_H
#include <QMainWindow>
#include <QtWidgets>
#include <QTcpSocket>
#include <QTcpServer>
namespace Ui {
class client_test;
}
class client_test : public QMainWindow
{
Q_OBJECT
public:
explicit client_test(QWidget *parent = 0);
~client_test();
QTcpSocket* m_socket; // 客户端套接字
void connectToServer(); // 连接到服务器
private slots:
void slot_readMessage(); // 处理接收服务器方发送的消息
void slot_btnSendMsg(); // 点击发送按钮后,后发送消息
private:
Ui::client_test *ui;
};
#endif // CLIENT_TEST_H
#数据库demo main.c
#include <QCoreApplication>
#include <QSql>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QString>
#include <QFile>
#include <QDebug>
#include <QVariantList>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("CashSystem.db");
if(database.open())
{
qDebug()<<"Database Opened";
QSqlQuery sql_query;
QString create_sql = "create table member (id int primary key, name varchar(30), address varchar(30))"; //创建数据表
QString insert_sql = "insert into member values(?,?,?)"; //插入数据
QString select_all_sql = "select * from member";
sql_query.prepare(create_sql); //创建表
if(!sql_query.exec()) //查看创建表是否成功
{
qDebug()<<QObject::tr("Table Create failed");
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<< "Table Created" ;
//插入数据
sql_query.prepare(insert_sql);
QVariantList GroupIDs;
GroupIDs.append(0);
GroupIDs.append(1);
GroupIDs.append(2);
QVariantList GroupNames;
GroupNames.append("hsp");
GroupNames.append("rl");
GroupNames.append("spl");
QVariantList GroupAddress;
GroupAddress.append("南充");
GroupAddress.append("宝鸡");
GroupAddress.append("南充");
sql_query.addBindValue(GroupIDs);
sql_query.addBindValue(GroupNames);
sql_query.addBindValue(GroupAddress);
if(!sql_query.execBatch())
{
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<<"插入记录成功";
}
//查询所有记录
sql_query.prepare(select_all_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())
{
int id = sql_query.value(0).toInt();
QString name = sql_query.value(1).toString();
QString address = sql_query.value(2).toString();
qDebug()<<QString("ID:%1 Name:%2 Address:%3").arg(id).arg(name).arg(address);
}
}
}
}
database.close();
// QFile::remove("CashSystem.db");
return a.exec();
}
#数据库demo2
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("CashSystem.db");
if(!db.open())
{
qDebug()<<"数据库打开出错";
}
else
qDebug()<<"数据库打开成功";
// 1. 实例化model
model = new QSqlTableModel(this);
// 2. 将模型设置到视图中
ui->tableView->setModel(model);
// 3. 给model设置数据库表 -- 前提条件: 数据库已经打开了
model->setTable("member");
// 4. 查询表
model->select();
QSqlQuery sql_query;
sql_query.exec("insert into member values(5,'34','天猫')");
qDebug()<<sql_query.lastError();
sql_query.exec("select * from member");
while(sql_query.next())
{
int id = sql_query.value(0).toInt();
QString name = sql_query.value(1).toString();
QString address = sql_query.value(2).toString();
qDebug()<<QString("ID:%1 Name:%2 Address:%3").arg(id).arg(name).arg(address);
}
}
MainWindow::~MainWindow()
{
delete ui;
}