Qt写TCP服务器代码
时间: 2024-05-05 19:15:53 浏览: 96
1103_01_server_1.5.zip
下面是一个简单的Qt TCP服务器代码示例:
```c++
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
#include <QDebug>
class MyServer : public QTcpServer
{
Q_OBJECT
public:
MyServer(QObject *parent = nullptr) : QTcpServer(parent) {}
protected:
void incomingConnection(qintptr socketDescriptor) override
{
QTcpSocket *socket = new QTcpSocket(this);
socket->setSocketDescriptor(socketDescriptor);
qDebug() << "New connection from:" << socket->peerAddress().toString();
connect(socket, &QTcpSocket::readyRead, this, &MyServer::readyRead);
connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);
}
private slots:
void readyRead()
{
QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
if (socket) {
QByteArray data = socket->readAll();
qDebug() << "Received data:" << data;
socket->write("OK");
}
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyServer server;
if (!server.listen(QHostAddress::Any, 1234)) {
qDebug() << "Server listen failed:" << server.errorString();
return -1;
}
qDebug() << "Server started on:" << server.serverAddress().toString() << server.serverPort();
return a.exec();
}
#include "main.moc"
```
该代码创建了一个名为`MyServer`的类,继承自`QTcpServer`,用于监听TCP连接。在`incomingConnection`方法中,当有新的连接到达时,创建一个新的`QTcpSocket`对象,并设置其套接字描述符为`socketDescriptor`。然后,将该套接字的`readyRead`和`disconnected`信号连接到`MyServer`的`readyRead`槽和自身的`deleteLater`槽,以便在连接断开时自动删除对象。
在`readyRead`槽中,当有数据可读时,读取该套接字的所有数据,并打印到控制台中。然后,将一个字符串`OK`写入该套接字中。
在`main`函数中,创建一个`MyServer`对象,并调用其`listen`方法来开始监听TCP连接。如果调用失败,则打印错误信息并退出。如果成功,则打印服务器的IP地址和端口号。最后,启动Qt事件循环。
在实际使用中,可能需要在`MyServer`类中添加更多的功能,例如在连接建立时发送欢迎消息,或在连接断开时发送告别消息。此外,还可以添加更多的槽来处理其他类型的数据。
阅读全文