qt tcp客户端代码
时间: 2023-08-28 15:08:15 浏览: 99
以下是一个简单的 Qt TCP 客户端的代码示例:
```cpp
#include <QtNetwork>
#include <QTcpSocket>
class Client : public QObject
{
Q_OBJECT
public:
explicit Client(QObject *parent = nullptr);
public slots:
void connectToServer();
void sendMessage();
private slots:
void readMessage();
void displayError(QAbstractSocket::SocketError socketError);
private:
QTcpSocket *m_socket;
};
Client::Client(QObject *parent)
: QObject(parent)
, m_socket(new QTcpSocket(this))
{
connect(m_socket, &QTcpSocket::readyRead, this, &Client::readMessage);
connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError)));
}
void Client::connectToServer()
{
m_socket->connectToHost("127.0.0.1", 8888);
}
void Client::sendMessage()
{
QString message = "Hello, server!";
QByteArray data;
QDataStream out(&data, QIODevice::WriteOnly);
out << quint16(0) << message.toUtf8();
out.device()->seek(0);
out << quint16(data.size() - sizeof(quint16));
m_socket->write(data);
}
void Client::readMessage()
{
QDataStream in(m_socket);
if (m_socket->bytesAvailable() < sizeof(quint16)) {
return;
}
quint16 blockSize;
in >> blockSize;
if (m_socket->bytesAvailable() < blockSize) {
return;
}
QString message;
in >> message;
qDebug() << "Received message: " << message;
}
void Client::displayError(QAbstractSocket::SocketError socketError)
{
qDebug() << "Error: " << socketError;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Client client;
client.connectToServer();
client.sendMessage();
return a.exec();
}
```
在 `Client` 类中,我们创建了一个 `QTcpSocket` 变量 `m_socket` 作为客户端的套接字。我们连接了 `readyRead` 信号,以便在收到服务器的响应时读取数据。我们在 `displayError` 槽中处理错误信号。
在 `connectToServer` 槽中,我们使用 `connectToHost` 函数连接到服务器。
在 `sendMessage` 槽中,我们创建一个数据流并将其用于打包消息。我们首先写入一个 0 的 16 位整数,以便稍后重新定位并写入消息大小。然后我们将消息写入数据流中并将其写入套接字。
在 `readMessage` 槽中,我们首先检查是否有足够的字节可供读取。然后我们读取一个 16 位整数以确定消息的大小,然后我们读取消息本身并在控制台上输出。
在 `main` 函数中,我们创建了 `Client` 类的实例,并通过调用 `connectToServer` 和 `sendMessage` 函数来连接到服务器并发送消息。
阅读全文