服务端
1 #include <QApplication> 2 #include <QtNetwork> 3 4 class CServer 5 : public QObject 6 { 7 Q_OBJECT 8 public: 9 CServer() 10 : m_server(NULL) 11 { 12 m_server = new QLocalServer(this); 13 QObject::connect(m_server, SIGNAL(newConnection()), this, SLOT(serverNewConnectionHandler())); 14 } 15 16 ~CServer() 17 { 18 m_server->close(); 19 20 delete m_server; 21 } 22 23 void RunServer() 24 { 25 qDebug() << "Run Server ok"; 26 27 QLocalServer::removeServer("ServerName"); 28 bool ok = m_server->listen("ServerName"); 29 if (!ok) 30 { 31 // TODO: 32 } 33 } 34 35 private slots: 36 void serverNewConnectionHandler() 37 { 38 qDebug() << "New Connection"; 39 40 QLocalSocket* socket = m_server->nextPendingConnection(); 41 QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyReadHandler())); 42 QObject::connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); 43 } 44 45 void socketReadyReadHandler() 46 { 47 QLocalSocket* socket = static_cast<QLocalSocket*>(sender()); 48 if (socket) 49 { 50 QTextStream stream(socket); 51 qDebug() << "Read Data From Client:" << stream.readAll(); 52 53 QString response = "Hello Client"; 54 socket->write(response.toUtf8()); 55 socket->flush(); 56 } 57 58 // 返回到客户端的void sendMessage方法,m_socket->waitForReadyRead()之后的操作 59 } 60 61 private: 62 QLocalServer *m_server; 63 }; 64 65 int main(int argc, char *argv[]) 66 { 67 // 至qt4.8(以上的不知道),在window下QApplication 68 // 必需放到QLocalServer创建之前 69 // 参考地址:http://www.qtcentre.org/archive/index.php/t-43522.html?s=26444975027844d43142ce2238f4605e 70 QApplication app(argc, argv); 71 72 CServer server; 73 server.RunServer(); 74 75 return app.exec(); 76 } 77 78 #include "main.moc"
客户端
1 #include <QApplication> 2 #include <QtNetwork> 3 4 class CClient 5 : public QObject 6 { 7 Q_OBJECT 8 public: 9 CClient() 10 : m_socket(NULL) 11 { 12 m_socket = new QLocalSocket(); 13 14 QObject::connect(m_socket, SIGNAL(connected()), this, SLOT(socketConnectedHandler())); 15 QObject::connect(m_socket, SIGNAL(disconnected()), this, SLOT(socketDisConnectedHandler())); 16 QObject::connect(m_socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(socketErrorHandler(QLocalSocket::LocalSocketError))); 17 } 18 19 ~CClient() 20 { 21 m_socket->disconnectFromServer(); 22 23 delete m_socket; 24 } 25 26 public: 27 void ConnectToServer(const QString &strServerName) 28 { 29 // 服务端的serverNewConnectionHandler成员方法将被调用 30 m_socket->connectToServer("ServerName"); 31 if (m_socket->waitForConnected()) 32 { 33 // TODO: 34 } 35 } 36 37 void sendMessage(const QString &msg) 38 { 39 m_socket->write(msg.toStdString().c_str()); 40 m_socket->flush(); 41 42 // waitForReadyRead将激发信号readyRead(), 我们在 43 // 与服务端创建连接时,已将readyRead(),绑定到了服务 44 // 端的槽socketReadyReadHandler成员方法 45 if (!m_socket->bytesAvailable()) 46 m_socket->waitForReadyRead(); 47 48 QTextStream stream(m_socket); 49 QString respond = stream.readAll(); 50 51 qDebug() << "Read Data From Server:" << respond; 52 } 53 54 private slots: 55 void socketConnectedHandler() 56 { 57 qDebug() << "connected."; 58 } 59 60 void socketDisConnectedHandler() 61 { 62 qDebug() << "disconnected."; 63 } 64 65 void socketErrorHandler(QLocalSocket::LocalSocketError error) 66 { 67 qWarning() << error; 68 } 69 70 private: 71 QLocalSocket *m_socket; 72 }; 73 74 int main(int argc, char *argv[]) 75 { 76 // 至qt4.8(以上的不知道),在window下QApplication 77 // 必需放到QLocalServer创建之前 78 // 参考地址:http://www.qtcentre.org/archive/index.php/t-43522.html?s=26444975027844d43142ce2238f4605e 79 QApplication app(argc, argv); 80 81 CClient client; 82 client.ConnectToServer("ServerName"); 83 84 client.sendMessage("Hellow Server"); 85 86 return app.exec(); 87 } 88 89 #include "main.moc"