QT的TCP收发协议

使用QT的网络编程需要在.pro文件里面添加:

QT +=network
  • client

client负责的是向server发送数据,而server负责侦听端口和向端口发送数据。构建一个client对象,主要包括以下几个方面:

    1. 创建套接字并实例化:

QTcpSocket *client;
this->client=new QTcpSocket;

    2.将这个套接字链接至服务器相应端口

        this->client->connectToHost("192.168.10.220",7002);
        if(!this->client->waitForConnected(10000000))
        {
            std::cout<<"cannot connect the server!"<<std::endl;
            return;
        }

   3.使用write函数向服务器写数据

 this->client->write(bytedata,12);

 4.与服务器断开

        this->client->disconnectFromHost();
        this->client->waitForDisconnected();

当socket的缓冲区有数据到来时,会有一个readready的信号,所以可以建立一个槽函数,来协助读取数据:

connect(m_tcpsocket,SIGNAL(readyRead()),this,SLOT(readmessage()),Qt::DirectConnection);//readyread为Qsignal成员函数
//发送对象  发送对象的信号 接收对象 槽函数(接收对象的成员)


//读取缓冲区用这个:
    QByteArray datagram;
    datagram=m_tcpsocket->readAll();
    FixedData+=datagram;//QByteArray可以添加
  • server

服务器除了需要使用QtcpSocket类之外,还需要使用QtcpServer类

    1 创建server对象

  m_tcpserver=new QTcpServer;
  m_tcpsocket=new QTcpSocket;

  m_tcpserver->listen(QHostAddress::Any,Port);//创建对象,侦听端口 
    connect(m_tcpserver,SIGNAL(newConnection()),this,SLOT(newConnect()),Qt::DirectConnection);//创建接收端口被访问信号的槽函数--

  2 构建接收数据的socket

void TCPServer::newConnect()
{
    m_tcpsocket = m_tcpserver->nextPendingConnection();
   // QMessageBox::about(this,"notice","new connect");
     connect(m_tcpsocket,SIGNAL(readyRead()),this,SLOT(readmessage()),Qt::DirectConnection);

    //connect(m_tcpsocket,SIGNAL(disconnected()),this,SLOT(deleteLater()),Qt::DirectConnection);
}

大致的样子就是这样,类文件我上传到资源里面了,可以来这里下载:

扫描二维码关注公众号,回复: 3794081 查看本文章

https://pan.baidu.com/s/1yZuaoN8mjKCm5V14EYAsNQ

猜你喜欢

转载自blog.csdn.net/weixin_38907330/article/details/82845162