• 大小: 3KB
    文件类型: .rar
    金币: 2
    下载: 2 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: TCP  服务端  QT  

资源简介

使用QT编写tcp的简单服务端。能够同时连接多个客户端,很基础的实现,适合对Qt tcpsever 不太了解的小伙伴学习。代码仅供参考。

资源截图

代码片段和文件信息

#include “MyTcpServer.h“
#include 
#include 

Server::Server(Qobject *parent int port):QTcpServer(parent)
{
      qDebug()<<“>>>>start to listen...“;
      listen(QHostAddress::Any port); //监听
}

void Server::incomingConnection(int socketDescriptor)
{
    qDebug()<<“>>>>a new client connect“;
    TcpSocket *tcpclientsocket = new TcpSocket(this);//只要有新的连接就生成一个新的通信套接字
    //将新创建的通信套接字描述符指定为参数socketdescriptor
    tcpclientsocket->setSocketDescriptor(socketDescriptor);

    //将这个套接字加入客户端套接字列表中
    tcpclientsocketlist.append(tcpclientsocket);


    //接收到tcpclientsocket发送过来的更新界面的信号
    connect(tcpclientsocket SIGNAL(updateserver(QStringint)) this SLOT(slotupdateserver(QStringint)));
    connect(tcpclientsocket SIGNAL(clientdisconnected(int)) this SLOT(slotclientdisconnect(int)));
}

void Server::slotupdateserver(QString msg int length)
{
    //将这个信号发送给界面
    emit updateserver(msg length);

    //将收到的信息发送给每个客户端从套接字列表中找到需要接收的套接字
    for(int i = 0; i < tcpclientsocketlist.count(); i++)
    {
        QTcpSocket *item = tcpclientsocketlist.at(i);
//        if(item->write((char*)msg.toUtf8().data() length) != length)
//        {
//            continue;
//        }

        item->write(msg.toUtf8().data());
    }
}

void Server::slotclientdisconnect(int descriptor)
{
    qDebug()<<“>>>>client disconnect!!!“;
   for(int i = 0; i < tcpclientsocketlist.count(); i++)
   {
        QTcpSocket *item = tcpclientsocketlist.at(i);
        if(item->socketDescriptor() == descriptor)
        {
            tcpclientsocketlist.removeAt(i);//如果有客户端断开连接, 就将列表中的套接字删除
            qDebug()<<“>>>>client delet“;
            return;
        }
    }
 return;
}


int Server::SendData(QByteArray &arr)
{
    qDebug() << “>>>>>SendSerialData:“<< arr.toHex();
    int ret;
    for(int i = 0; i < tcpclientsocketlist.count(); i++)
    {
        QTcpSocket *item = tcpclientsocketlist.at(i);

        ret =item->socketDescriptor();
        QHostAddress s=item->localAddress();
        QString Ipadd = s.toString();
        qDebug()<<“>>>>ip address:“<
        item->write((arr));
        item->flush();
    }
    qDebug() << “>>>>>ret:“<    if(ret < 0)
    {
        qDebug() << “>>>>>SendData failed:“;
        return -1;
    }

    return ret;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2638  2018-10-08 15:08  TCP服务端代码\MyTcpServer.cpp

     文件        789  2018-10-08 09:50  TCP服务端代码\MyTcpServer.h

     文件       1149  2018-10-08 09:48  TCP服务端代码\TcpSocket.cpp

     文件        639  2018-10-08 09:50  TCP服务端代码\TcpSocket.h

     目录          0  2018-10-10 10:41  TCP服务端代码

----------- ---------  ---------- -----  ----

                 5215                    5


评论

共有 条评论