大家好,又见面了,我是你们的朋友全栈君。
QTcpServer类
提供一个TCP基础服务类 继承自QObject 这个类用来接收到来的TCP连接,可以指定TCP端口或者用QTcpServer自己挑选一个端口,可以监听一个指定的地址或者所有的机器地址。 调用listen()来监听所有的连接,每当一个新的客户端连接到服务端就会发射信号newConnection() 调用nextPendingConnection()来接受待处理的连接。返回一个连接的QTcpSocket(),我们可以用这个返回的套接字和客户端进行连接
如果有错误,serverError()返回错误的类型。调用errorString()来把错误打印出来。 当监听连接时候,可以调用serverAddress()和serverPort()来返回服务端的地址和端口。 调用close()来关闭套接字,停止对连接的监听。‘ 尽管QTcpServer大多时候设计使用事件循环,也可以不适用事件循环,可以使用waitForNewConnection(),会一直阻塞,知道一个连接可以用或者超时。 在Symbian平台上,同样的需要NetworkServices平台支持。
QTcpSocket 详细描述: QTcpSocket 类提供一个TCP套接字 TCP是一个面向连接,可靠的的通信协议,非常适合于连续不断的数据传递 QTcpSocket 是QAbstractSocket类非常方便的一个子类,让你创建一个TCP连接和数据流交流。 注意:TCP套接字不能以QIODevice::Unbuffered模式来打开
在Symbian系统上,程序想用这个类的话必须拥有NetworkServices平台支持,如果客户机缺少这个能力,将会导致”恐惧”(不明白为什么这么翻译)
成员函数: QTcpSocket::QTcpSocket ( QObject * parent = 0 ) 以UnconnectedState态创建一个QTcpSocket对象 QTcpSocket::~QTcpSocket () [virtual]‘ 析构函数,销毁对象
1、mysocket.h
代码语言:javascript复制#ifndef MYSOCKET_H
#define MYSOCKET_H
#include <QObject>
class QTcpSocket;
class QTcpServer;
class MySocket : public QObject
{
Q_OBJECT
public:
explicit MySocket(QObject *parent = nullptr);
~MySocket();
bool writeData(const QString& data);
signals:
void reciveData(const QString& data);
public slots:
private:
QTcpServer* m_tcp_server;
QTcpSocket* m_tcp_socket;
};
#endif // MYSOCKET_H
2、mysocket.cpp
代码语言:javascript复制#include "mysocket.h"
#include <QTcpServer>
#include <QTcpSocket>
#include <QDebug>
MySocket::MySocket(QObject *parent) : QObject(parent),
m_tcp_server(new QTcpServer),
m_tcp_socket(nullptr)
{
m_tcp_server->listen(QHostAddress::Any, 4020);
connect(m_tcp_server, &QTcpServer::newConnection, this, [this]{
m_tcp_socket = m_tcp_server->nextPendingConnection();
qDebug() << "Peer address: " << m_tcp_socket->peerAddress() << "peer port: " << m_tcp_socket->peerPort();
connect(m_tcp_socket, &QTcpSocket::readyRead, this, [this]{
QString r_data = QString(m_tcp_socket->readAll());
qDebug() << r_data;
emit this->reciveData(r_data);
});
});
}
MySocket::~MySocket()
{
m_tcp_server->close();
if(m_tcp_socket) delete m_tcp_socket;
if(m_tcp_server) delete m_tcp_server;
}
bool MySocket::writeData(const QString &data)
{
if(!m_tcp_socket) return false;
m_tcp_socket->write(data.toUtf8());
return true;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。