[Qt] QLocalSocket实现简单的CS连接
目录
1.客户端
2.服务器
3.连接测试
利用Qt的QLocalSocket机制实现简单的服务器客户端连接。
1.客户端 client.h
#ifndef CLIENT_H
#define CLIENT_H#include
#include
#include class CClient : public QObject
{
Q_OBJECTpublic:
CClient() : m_socket(NULL)
{
m_socket = new QLocalSocket();
connect(m_socket, SIGNAL(connected()), SLOT(socketConnectedHandler()));
connect(m_socket, SIGNAL(disconnected()), SLOT(socketDisConnectedHandler()));
connect(m_socket, SIGNAL(error(QLocalSocket::LocalSocketError)),
SLOT(socketErrorHandler(QLocalSocket::LocalSocketError)));
}~CClient()
{
m_socket->disconnectFromServer();
delete m_socket;
}public:
void ConnectToServer(const QString &strServerName)
{
// serverNewConnectionHandler 成员方法将被调用
m_socket->connectToServer(strServerName);
if (m_socket->waitForConnected())
{
// TODO:
}
}void sendMessage(const QString &msg)
{
m_socket->write(msg.toStdString().c_str());
m_socket->flush();
if (!m_socket->bytesAvailable())
m_socket->waitForReadyRead();
QTextStream stream(m_socket);
QString respond = stream.readAll();
qDebug() << "Read Data From Server:" << respond;
}private slots:
void socketConnectedHandler()
{
qDebug() << "connected.";
}void socketDisConnectedHandler()
{
qDebug() << "disconnected.";
}void socketErrorHandler(QLocalSocket::LocalSocketError error)
{
qWarning() << error;
}private:
QLocalSocket *m_socket;
};
#endif // CLIENT_H
main.cpp
#include "client.h"
#include int main(int argc, char *argv[])
{
QApplication a(argc, argv);
CClient client;
client.ConnectToServer("ServerName");
client.sendMessage("Hellow Server");
return a.exec();
}
2.服务器 server.h
#ifndef SERVER_H
#define SERVER_H#include
#include
#include
#include class CServer : public QObject
{
Q_OBJECTpublic:
CServer() : m_server(NULL)
{
m_server = new QLocalServer;
connect(m_server, SIGNAL(newConnection()), SLOT(serverNewConnectionHandler()));
}~CServer()
{
m_server->close();
delete m_server;
}void RunServer()
{
qDebug() << "Run Server ok";
QLocalServer::removeServer("ServerName");
bool ok = m_server->listen("ServerName");
if (!ok)
{
// TODO:
}
}private slots:
void serverNewConnectionHandler()
{
qDebug() << "New Connection";
qDebug() << "listen: " << m_server->serverName();
QLocalSocket* socket = m_server->nextPendingConnection();
connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyReadHandler()));
connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
}void socketReadyReadHandler()
{
QLocalSocket* socket = static_cast(sender());
if (socket)
{
QTextStream stream(socket);
qDebug() << "Read Data From Client:" << stream.readAll();
QString response = "Hello Client";
socket->write(response.toUtf8());
socket->flush();
}
}private:
//判断该服务器是否在运行
bool isServerRun(const QString &servername)
{
QLocalSocket socket;
socket.connectToServer(servername);
if(socket.waitForConnected(1000))
{
socket.disconnectFromServer();
socket.close();
return true;
}
return false;
}private:
QLocalServer *m_server;
};
#endif // SERVER_H
main.cpp
#include "server.h"
#include int main(int argc, char *argv[])
{
QApplication a(argc, argv);
CServer server;
server.RunServer();
//server.initServer(QString("ServerName"));
return a.exec();
}
3.连接测试
文章图片
【[Qt] QLocalSocket实现简单的CS连接】
文章图片
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 科学养胃,别被忽悠,其实真的很简单
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树
- 松软可口易消化,无需烤箱超简单,新手麻麻也能轻松成功~
- 人脸识别|【人脸识别系列】| 实现自动化妆