平台:Windows7 64位
Qt版本:Qt 5.6(vs2015)
代码:
客户端
头文件
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include
class QLocalSocket;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
QLocalSocket *m_LocalSocket;
};
#endif // MAINWINDOW_HPP
源文件
#include "mainwindow.hpp"
#include "ui_mainwindow.h"
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
m_LocalSocket = new QLocalSocket;
m_LocalSocket->setServerName(QApplication::applicationName());
connect(m_LocalSocket, &QLocalSocket::connected, this, [=]() {
qDebug() << "connected";
QMessageBox::warning(this, "", "connected");
});
connect(m_LocalSocket, &QLocalSocket::disconnected, this, [=]() {
qDebug() << "disconnected";
QMessageBox::warning(this, "", "disconnected");
});
connect(m_LocalSocket, &QLocalSocket::readyRead, this, [=]() {
ui->textEdit->append(QTime::currentTime().toString("hh:mm:ss"));
ui->textEdit->append(m_LocalSocket->readAll());
ui->textEdit->append("\n");
});
connect(m_LocalSocket,
static_cast(
&QLocalSocket::error),
this, [=](QLocalSocket::LocalSocketError error) {
qDebug() << "error" << error;
QMessageBox::warning(this, "", "error");
});
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::on_pushButton_clicked() {
m_LocalSocket->connectToServer(ui->lineEdit->text());
}
void MainWindow::on_pushButton_2_clicked() {
m_LocalSocket->write(ui->lineEdit_2->text().toUtf8());
m_LocalSocket->flush();
ui->textEdit->append(QTime::currentTime().toString("hh:mm:ss"));
ui->textEdit->append(ui->lineEdit_2->text());
ui->textEdit->append("\n");
ui->lineEdit_2->clear();
}
服务器
头文件
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include
class QLocalServer;
class QLocalSocket;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
QLocalServer *m_LocalServer;
QList m_LocalSockets;
};
#endif // MAINWINDOW_HPP
源文件
#include "mainwindow.hpp"
#include "ui_mainwindow.h"
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
m_LocalServer = new QLocalServer;
connect(m_LocalServer, &QLocalServer::newConnection, this, [=]() {
QLocalSocket *localSocket = m_LocalServer->nextPendingConnection();
if (!m_LocalSockets.contains(localSocket)) {
m_LocalSockets.append(localSocket);
}
connect(localSocket, &QLocalSocket::readyRead, this, [=]() {
QTextStream stream(localSocket);
ui->textEdit->append(QTime::currentTime().toString("hh:mm:ss"));
ui->textEdit->append(stream.readAll());
ui->textEdit->append("\n");
});
connect(localSocket, &QLocalSocket::disconnected, localSocket,
&QLocalSocket::deleteLater);
});
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::on_pushButton_clicked() {
ui->pushButton->setEnabled(false);
QLocalServer::removeServer(ui->lineEdit->text());
if (!m_LocalServer->listen(ui->lineEdit->text())) {
QMessageBox::warning(this, "", "server init error");
} else {
QMessageBox::warning(this, "", "server init success");
}
ui->pushButton->setEnabled(true);
}
void MainWindow::on_pushButton_2_clicked() {
foreach (QLocalSocket *localSocket, m_LocalSockets) {
localSocket->write(ui->lineEdit_2->text().toUtf8());
localSocket->flush();
}
ui->textEdit->append(QTime::currentTime().toString("hh:mm:ss"));
ui->textEdit->append(ui->lineEdit_2->text());
ui->textEdit->append("\n");
ui->lineEdit_2->clear();
}
效果: