精华内容
下载资源
问答
  • QTcpServer

    千次阅读 2018-08-11 09:28:32
    ​ 最近用Qt写一个tcp的server,用到了QTcpServer类,按照网上的示例代码很快就写完了代码。当有客户端连接时,客户端能够连接上server,但tcpserver始终拿不到newConnection的信号,百思不得其解。查看了网上很多...

    说明

    ​最近用Qt写一个tcp的server,用到了QTcpServer类,按照网上的示例代码很快就写完了代码。当有客户端连接时,客户端能够连接上server,但tcpserver始终拿不到newConnection的信号,百思不得其解。查看了网上很多示例代码,发现他们的代码都基于Widget或ConsoleApplication,而我的代码不是基于这两者的,主函数创建完server类后,就写了个while sleep循环。想想,我们一般写server时都需要创建监听线程,而这里的线程呢?后来看到一个完整的基于ConsoleApplication的工程示例,发现其主函数再创建完server后,开始了主线程事件循环,猜想主函数这段代码的意义就是创建完server后将线程交给qt取处理,才能够connect到信号响应相应的槽,基于Widget的代码想想也是这样。

    代码编写

    使用Qt创建Console Application工程,新建Server类,继承QObject

    #ifndef SERVER_H
    #define SERVER_H
    
    #include <QObject>
    #include <QDebug>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <QByteArray>
    
    class Server : public QObject
    {
        Q_OBJECT
    public:
        explicit Server(QObject *parent = nullptr);
    
        void StartListen(int nPort);
    private:
        QTcpServer *m_piserver;
        QTcpSocket *m_pisocket;
    
    signals:
    
    public slots:
        void newClientConnect();
        void readMessage();
        void disConnect();
    };
    
    #endif // SERVER_H
    
    #include "server.h"
    #include "QCoreApplication"
    
    Server::Server(QObject *parent) : QObject(parent)
    {
        m_piserver = new QTcpServer;
        m_pisocket = new QTcpSocket;
        StartListen(2016);
    }
    
    void Server::StartListen(int nPort)
    {
        if(m_piserver->listen(QHostAddress::Any,nPort))
            qDebug() << "listen ok";
        else
            qDebug() << "listen err";
        connect(m_piserver,SIGNAL(newConnection()),this,SLOT(newClientConnect()));
    }
    
    void Server::newClientConnect()
    {
        qDebug() << "new client connect";
        m_pisocket = m_piserver->nextPendingConnection();
        connect(m_pisocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
        connect(m_pisocket,SIGNAL(disconnected()),this,SLOT(disConnect()));
    }
    
    void Server::readMessage()
    {
        qDebug() << "read client message";
        QByteArray buf;
        buf = m_pisocket->readAll();
        qDebug() << buf;
    }
    
    void Server::disConnect()
    {
        qDebug() << "client disconnect";
    }
    
    #include <server.h>
    #include <QCoreApplication>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        Server *piServer = new Server;
        return a.exec();//开始主线程事件循环
    }
    
    展开全文
  • QTcpserver

    2020-04-01 09:56:42
    基于 QTcpserver 的 demo. Header:#include qmake:QT += network 创建服务器socket.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40...

    基于 QTcpserver 的 demo.



    Header:#include
    qmake:QT += network


    创建服务器socket.

    QTcpServer *ser;                //定义服务器对象
    ser = new QTcpServer(this);     //创建服务器socket
    ```      
    ### 绑定和监听
    ```c++
    ser->listen(QHostAddress::Any, PORT); //设置为监听模式   这里的Any代表默认获取本地的IP,如果需要指定IP:ser->listen(QHostAddress("IP"), PORT);
    ```       
    ### 获取服务端的IP和PORT
    ```c++
    QString serIP = ser->serverAddress().toString();
    QString serPORT = QString::number(ser->serverPort());
    
    ui->label->setText("IP: " + serIP);
    ui->label_2->setText("PORT: " + serPORT);
    ```        
    ### 监听这里可以判断一下是否成功监听
    ```c++
    if(ser->listen(QHostAddress::Any, PORT))
    {
            qDebug() << "listen ok";
    }
    else
            qDebug() << "listen false";
    ```              
    ### 监听到有新的连接成功之后会受到一个newConnection()信号,这个时候需要通过connect去关联成功连接信号,同时写一个回调的槽函数newConnect()
    ```c++
    connect(ser, SIGNAL(newConnection()), this, SLOT(newConnect()));//关联连接请求信号  newConnection() 新的连接请求信号   newConnect() 用户编写的槽函数
    ```        
    ----  
    
    ### 关联新连接的槽函数的编写
    ```c++
    //处理客户断的连接请求
    void MainWindow::newConnect()
    {
            //服务器之负责接受连接请求,不负责通信
            //产生新的通信对象
    
            QTcpSocket *new_clien = ser->nextPendingConnection();
            //打印连接者的主机名、端口、IP
            QString name = new_clien->peerName();
            QString port = QString::number(new_clien->peerPort());
            QString ip   = new_clien->peerAddress().toString();
    
            ui->textBrowser->append(name);
            ui->textBrowser->append(port);
            ui->textBrowser->append(ip);
            
            //当需要实现服务端能接收信息   (必须写在 new_clien 创建/接收成功后)
            connect(new_clien, SIGNAL(readyRead()), this, SLOT(readData())); //关联可读信息信号  readyRead() 可读信息信号    readData() 用户编写的读数据槽函数
    }
    


    接收可读信号的槽函数
    .

    void MainWindow::readData()
    {
            QString msg = new_clien->readAll();
    
            ui->msg_browser->append(msg);
    }

    我的GITHUB

    展开全文
  • QTcpserver 服务器

    2018-03-30 11:07:52
    qt4.8的开发环境,qtcpserver,qtcpsocket开发的服务器端。
  • QT QTcpServer

    2021-06-22 19:03:54
    QTcpServer类提供了一个基于tcp的服务器。 该类使接收传入TCP连接成为可能。您可以指定端口或让QTcpServer自动选择一个。您可以监听一个特定的地址或所有机器的地址。 调用listen()让服务器侦听传入的连接。然后,...

    QTcpServer类提供了一个基于tcp的服务器。
    该类使接收传入TCP连接成为可能。您可以指定端口或让QTcpServer自动选择一个。您可以监听一个特定的地址或所有机器的地址。
    调用listen()让服务器侦听传入的连接。然后,每次客户端连接到服务器时都会发出newConnection()信号。
    调用nextPendingConnection()接受挂起的连接作为一个已连接的QTcpSocket。该函数返回一个指向QAbstractSocket::ConnectedState中的QTcpSocket的指针,您可以使用该指针与客户端通信。
    如果发生错误,则serverError()返回错误的类型,并且可以调用errorString()来获得关于发生了什么事情的可读描述。
    当侦听连接时,服务器正在侦听的地址和端口可以作为serverAddress()和serverPort()使用。
    调用close()将使QTcpServer停止侦听传入的连接。
    虽然QTcpServer主要是为与事件循环一起使用而设计的,但也可以不使用它。在这种情况下,您必须使用waitForNewConnection(),它会阻塞直到连接可用或超时。
    请参见QTcpSocket、Fortune服务器示例、线程化的Fortune服务器示例、Loopback示例和Torrent示例。

    展开全文
  • QTcpServer学习代码

    2018-04-07 16:24:26
    QTcpServer学习代码。里面包含常用的接口介绍。eg: listen() close()
  • QTcpserver&QTcpclient

    2015-10-22 11:29:06
    使用QTcpserver和QTcpsocket写的简单的TCP服务器和客户端,能实现简单的通信,支持中文收发
  • QTcpServer 搭建

    2020-03-30 22:29:58
    1. 通过重写[virtual protected] void QTcpServer::incomingConnection(qintptr socketDescriptor),获取soketDescriptor。自定义TcpClient类继承QTcpSocket,并将获得的soketDescriptor作为类成员。 这个方法的优点...

    解决的方法: 
    1. 通过重写[virtual protected] void QTcpServer::incomingConnection(qintptr socketDescriptor),获取soketDescriptor。自定义TcpClient类继承QTcpSocket,并将获得的soketDescriptor作为类成员。 这个方法的优点是:可以获取到soketDescriptor,灵活性高。缺点是:需要重写函数、自定义类。 
    2. 在newConnection()信号对应的槽函数中,通过QTcpSocket *QTcpServer::nextPendingConnection()函数获取 新连接的客户端:Returns the next pending connection as a connected QTcpSocket object. 虽然仍然得不到soketDescriptor,但可以通过QTcpSocket类的peerAddress()和peerPort()成员函数获取客户端的IP和端口号,同样是唯一标识。 优点:无需重写函数和自定义类,代码简洁。缺点:无法获得SocketDecriptor,灵活性差。

    展开全文
  • QTcpServer

    2017-10-23 20:36:48
    (一)public functions 1.QTcpServer(QObject *parent = Q_NULLPTR)2.virtual ~QTcpServer()3.void close()4.QString errorString() const5.virtual bool hasPendingConnections() const6.bool isListening() c
  • QT QTcpServer实现多客户端连接。博客地址:https://blog.csdn.net/sinat_33859977/article/details/100110460
  • 5.0.2 QTcpServer

    2015-01-05 09:49:12
    QTcpServer 用于编写服务器程序 QTcpServer(QObject * parent = 0) virtual ~QTcpServer() 服务器编程基本模型  QTcpServer * TcpServer; // 主要是用来监听的,这是QTcpServer类特有的一些功能 // 第一步 ...
  • Qt QTcpServer

    千次阅读 2016-05-18 00:35:34
    1、初始化QTcpServer,监听本机指定的端口 void MyTcpServer::init() { tcpServer = new QTcpServer(); if(tcpServer->listen(QHostAddress::Any, SERVER_PORT)) { qDebug()"tcpServer init"; connec
  • QTcpServer和QTcpSocket去实现的聊天室的基本程序,主要是服务器端的构建
  • 有一段时间没有使用socket编程了,这两天抽时间使用QtcpSocket和QTcpServer写了一个简单的聊天小工具。
  • QTcpServer QTcpScoket通讯

    2015-04-09 10:59:03
    最近需要一个数据转发的程序,昨天快下班之前看了QTcpServer和QTcpSocket模块,边看文档,边写了一个发送消息的demo。下完就下班了,今天早晨来测试,发现没什么问题。 QTcpServer 和QtcpSocket的封装,让我们写这...
  • QTcpServer多线程编程

    2020-06-24 02:42:07
    Qt 4.6自带的threaddedfortuneserver是个简单明了的 Qt C/S网络编程server端程序的例子, 该例子演示了 QTcpServer与QThread配合的方法。 代码不多, 但包含了Qt网络编程的几个关键点。 - FortuneServer类从...
  • QTcpServer编程相关

    2019-09-29 19:47:59
    QTcpServer编程 网络编程,OSI(开放式系统互联参考模型)七层参考模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 套接字(Socket)是网络通信的基本构建模块,又分为流式套接字(Stream Socket)和...
  • 创建QTcpServer对象 2.启动服务器(监听)调用成员方法listen(QHostAddress::Any,端口号) 3.当有客户端链接时候会发送newConnection信号,触发槽函数接受链接(得到一个与客户端通信的套接字QTcpSocket) 4....
  • Qt 4.6自带的threaddedfortuneserver是个简单明了的 Qt C/S网络编程server端程序的例子, 该例子演示了 QTcpServer与QThread配合的方法。 代码不多, 但包含了Qt网络编程的几个关键点。 - FortuneServer类从...
  • 基于Qt开发的TCP通讯工具,包含客户端和服务端的工程文件夹,运用QTcpsocket和QTcpserver控件,实现文本发送,文件发送,代码简洁易懂,适合新手学习。
  • QTcpServer / QTcpSocket 简单示例

    千次阅读 2017-06-25 13:28:24
    先看服务端#include #include <QTcpServer> #include <QTcpSocket>class CTcpServer : public QObject { Q_OBJECT public: explicit CTcpServer(QObject *parent = 0); ~CTcpServer();private slots
  • 基于QCamera, QTcpServer实现网络视频监控. 支持多客户端. 文档说明: http://blog.csdn.net/jklinux/article/details/75072993
  • 实现时分别继承QTcpServer和QTcpScoket实现出自己需要的类。 继承QTcpServer为每个客户端连接时分配线程,并接受处理tcpScoket的信号和槽、、还有发送信息,储存连接信息等。 继承QTcpScoket为处理通信数据和增加...
  • QSslServer:QTcpServer的扩展以支持ssl。 与QSslSocket对应
  • QTcpServer多客户端连接

    2020-05-24 20:59:18
    Qt默认的QTcpServer有新的连接时会触发newConnection信号,在其对应的槽函数中new QTcpSocket, 通过new的QTcpSocket对象接受发送数据,当有多客户端连接时,Server端接受的数据将不容易分辨是哪个客户端的socket...
  • QT自带QTcpServer架构分析

    千次阅读 2018-08-14 19:44:18
    Qt 4.6自带的threaddedfortuneserver是个简单明了的 Qt C/S网络编程server端程序的例子, 该例子演示了 QTcpServer与QThread配合的方法。 代码不多, 但包含了Qt网络编程的几个关键点。   - FortuneServer类从...
  • QTcpServer基本用法

    万次阅读 2016-09-14 09:42:14
    Server.h#include #include <QTcpServer> #include <QTcpSocket>#include #include "IMsgInterface.h"class Server : public QObject { Q_OBJECT public: explicit Server(QOb

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,740
精华内容 1,096
关键字:

qtcpserver