Qt中利用TCP实现多个客户端之间相互发送消息系以及服务器的群发信息

Qt中利用TCP实现多个客户端之间相互发送消息系以及服务器的群发信息

标签: QTtcp服务器socket
2141人阅读 评论(1) 收藏 举报
本文章已收录于:

前两天写了个简单的服务器和客户端之间的数据传送,主要是为了熟悉一下QTcpsocket和QTcpserver的用法,然后今天在此基础上实现多个客户端之间的相互通信以及利用服务器可以群发信息。(只是供大家参考,勿喷)

代码运行如图


思路如下:首先每个客户端与服务器相连是会有一个对应的Tcpsocket,把这些sockt全部放入一个list容器中,当客户端有数据发送时,读取是哪个socket中的消息,读取完后,再把消息发送到list中的所有socket中,在客户端判断这个消息是不是发送给自己的,如果是,则接受,否则不接受(在读到是哪个socket中有数据时,也可直接写入到这个socket中),要注意的是对数据进行打包和解包。对数据进行分析,我这个只是一个简单的参考。

创建一个存放socket的list容器:

socket_list=newQList<QTcpSocket*>;

把客户端的socket放入list容器中:

m_tcpsocket = m_tcpserver->nextPendingConnection();

 
    
    socket_list->append(m_tcpsocket);
 
    
    connect(m_tcpsocket,SIGNAL(readyRead()),
            this,SLOT(readMessage()));

 服务器读取客户端的消息并发送出去:

    for(int i = 0;i < socket_list->length();i ++)
    {
        qDebug() << "QDataStream " ;
        QDataStream in(socket_list->at(i));
        in.setVersion (QDataStream::Qt_5_4);
        in >> message;
        if(!(message.isEmpty()))
        {
            qDebug() << "break " ;
            break;
        }
    }
    ui->textBrowser->append(tr("reveived client message: '%1'").arg(message));
    sendMessage(message);//发送消息

发送出去

void Widget::sendMessage(QString infomation)
{
    QString str = infomation;
    QByteArray message;
    QDataStream out(&message,QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_5_4);
    out<<str;
    //m_tcpsocket->write(message);
    for (int i = 0;i < socket_list->length();i ++)
    {
        socket_list->at(i)->write(message);
    }
}
客户端给服务器发送消息 打包数据:

  QString string = ui->le_rec->text() + "|" + ui->le_id->text() + "|" + ui->lineEdit->text();

客户端对服务器发来的的信息进行分析:

    QDataStream in(m_tcpsocket);
    in.setVersion(QDataStream::Qt_5_4);
 
    
    QString greeting;
    in >> greeting;
    QStringList info = greeting.split("|");
    qDebug() << "info[0]" << info[0];
    qDebug() << "info[1]" << info[1];
    qDebug() << "info[2]" << info[2];
    if(ui->le_id->text() == info[0])
    {
      ui->textBrowser->append(tr("'%1'对你说: '%2'").arg(info[1]).arg(info[2]));
    }
    if(info[0] == "group")//服务器群发消息
    {
        ui->textBrowser->append(tr("server  : '%1'").arg(info[1]));
    }
    info.clear();//这句话必须有,不然会出现客户端崩溃的情况,超出范围


完整代码下载地址: http://download.csdn.net/download/qq_33425353/9575879

1
0
 
 
MQ JMS发送消息并接收客户端回复 使用JMS发送消息客户端示例代码 java客户端发送消息到服务端 mina整合spring 服务端反向发送消息到客户端 完整实例 客户端往服务端定时发送消息 Select IO模型来实现一个并发处理多个客户端的TCP服务器 QT 使用QTcpServer QTcpSocket 建立TCP服务器端 和 客户端 二用多线程管理TCP多个客户端连接服务器 Linux cTCP的多个客户端连接服务器 20 TCP的多个客户端连接服务器

  相关文章推荐
  • MQ JMS发送消息并接收客户端回复
  • 使用JMS发送消息客户端示例代码
  • java客户端发送消息到服务端
  • mina整合spring 服务端反向发送消息到客户端 完整实例
  • 客户端往服务端定时发送消息
  • Select IO模型来实现一个并发处理多个客户端的TCP服务器
  • QT 使用QTcpServer QTcpSocket 建立TCP服务器端 和 客户端
  • 二用多线程管理TCP多个客户端连接服务器
  • Linux cTCP的多个客户端连接服务器 20
  • TCP的多个客户端连接服务器

你可能感兴趣的:(QT)