qt tcp服务端代码
时间: 2023-09-12 10:06:07 浏览: 129
以下是一个简单的Qt TCP服务端代码:
```cpp
#include <QTcpServer>
#include <QTcpSocket>
class MyServer : public QTcpServer
{
Q_OBJECT
public:
explicit MyServer(QObject *parent = nullptr);
protected:
void incomingConnection(qintptr socketDescriptor) override;
};
MyServer::MyServer(QObject *parent)
: QTcpServer(parent)
{
}
void MyServer::incomingConnection(qintptr socketDescriptor)
{
// 创建一个新的socket
QTcpSocket *socket = new QTcpSocket(this);
// 设置socket的描述符
socket->setSocketDescriptor(socketDescriptor);
// 打印客户端连接信息
qDebug() << "New client connected:" << socket->peerAddress().toString() << socket->peerPort();
// 发送欢迎消息
socket->write("Welcome to my server!");
// 关闭socket
socket->close();
socket->deleteLater();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyServer server;
if (!server.listen(QHostAddress::Any, 1234)) {
qDebug() << "Failed to start server!";
return 1;
}
qDebug() << "Server started on port" << server.serverPort();
return a.exec();
}
#include "main.moc"
```
在这个例子中,我们继承了`QTcpServer`类,重写了`incomingConnection`方法来处理新的客户端连接。在`incomingConnection`方法中,我们创建一个新的`QTcpSocket`对象,并设置其描述符为新连接的描述符。然后我们打印客户端连接信息,并向客户端发送欢迎消息。最后,我们关闭socket并删除它。
在`main`函数中,我们创建了一个`MyServer`对象,并使用`listen`方法来监听所有网络接口的1234端口。如果监听失败,我们打印错误信息并返回1。如果监听成功,我们打印服务器启动信息,并开始Qt主循环。
注意,在`incomingConnection`方法中,我们使用了`deleteLater`方法来删除socket对象。这是因为在Qt中,对象的删除必须在主线程中进行。而`incomingConnection`方法是在子线程中调用的。通过使用`deleteLater`方法,我们将socket对象的删除操作推迟到主线程中执行,避免了可能的线程安全问题。
阅读全文
相关推荐














