From: http://xizhizhu.blogspot.com/2009/01/qt-development-vi-tcp-communication.html
1.QTcpSocket
QTcpSocket is used as the TCP socket in Qt. It's used both in client and server side.
To perform as a client, following steps are used:
a) call QTcpSocket.connectToHost() to connect to a server;
b) when connected, QTcpSocket.connected() will be emitted;
c) communicate with the server.
The following code shows a simple client sending "Hello, world" to the server.
2.QTcpServer
In Qt, the class QTcpServer is used as a TCP server. Generally, the following steps are used:
a) call QTcpServer.listen() to start listening;
b) QTcpServer.newConnection() signal will be emitted when a new connection comes;
c) call QTcpServer.nextPendingConnection() to get the socket object (QTcpSocket) connecting to the client.
The following code shows a simple server receiving and printing a string from its client.
P.S.You should add QT += network in the project file created by qmake -project.
1.QTcpSocket
QTcpSocket is used as the TCP socket in Qt. It's used both in client and server side.
To perform as a client, following steps are used:
a) call QTcpSocket.connectToHost() to connect to a server;
b) when connected, QTcpSocket.connected() will be emitted;
c) communicate with the server.
The following code shows a simple client sending "Hello, world" to the server.
// client.h
#include <QtNetwork>
#include <QObject>
#include <QString>
#include <QTcpSocket>
class Client: public QObject
{
Q_OBJECT
public:
Client(QObject* parent = 0);
~Client();
void start(QString address, quint16 port);
public slots:
void startTransfer();
private:
QTcpSocket client;
};
// client.cc
#include "client.h"
#include <QHostAddress>
Client::Client(QObject* parent): QObject(parent)
{
connect(&client, SIGNAL(connected()),
this, SLOT(startTransfer()));
}
Client::~Client()
{
client.close();
}
void Client::start(QString address, quint16 port)
{
QHostAddress addr(address);
client.connectToHost(addr, port);
}
void Client::startTransfer()
{
client.write("Hello, world", 13);
}
// main.cc
#include "client.h"
#include <QApplication>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
Client client;
client.start("127.0.0.1", 8888);
return app.exec();
}
2.QTcpServer
In Qt, the class QTcpServer is used as a TCP server. Generally, the following steps are used:
a) call QTcpServer.listen() to start listening;
b) QTcpServer.newConnection() signal will be emitted when a new connection comes;
c) call QTcpServer.nextPendingConnection() to get the socket object (QTcpSocket) connecting to the client.
The following code shows a simple server receiving and printing a string from its client.
#include <QtNetwork>
#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>
class Server: public QObject
{
Q_OBJECT
public:
Server(QObject * parent = 0);
~Server();
public slots:
void acceptConnection();
void startRead();
private:
QTcpServer server;
QTcpSocket* client;
};
// server.cc
#include "server.h"
#include <iostream>
using namespace std;
Server::Server(QObject* parent): QObject(parent)
{
connect(&server, SIGNAL(newConnection()),
this, SLOT(acceptConnection()));
server.listen(QHostAddress::Any, 8888);
}
Server::~Server()
{
server.close();
}
void Server::acceptConnection()
{
client = server.nextPendingConnection();
connect(client, SIGNAL(readyRead()),
this, SLOT(startRead()));
}
void Server::startRead()
{
char buffer[1024] = {0};
client->read(buffer, client->bytesAvailable());
cout >> buffer >> endl;
client->close();
}
// main.cc
#include "server.h"
#include <QApplication>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
Server server;
return app.exec();
}
P.S.You should add QT += network in the project file created by qmake -project.
No comments:
Post a Comment