学习之章_QT即时通信(LinPop)

使用QT在Linux环境下,通过UDP实现局域网内的即时通信应用,包括用户上线/下线广播、用户列表更新、文件传输等功能。程序结构包含发送和接收UDP套接字,利用信号和槽进行数据处理。
摘要由CSDN通过智能技术生成
         项目来源及背景:利用Qt开发一款运行于linux下的IM(即时通信)软件,可以实现局域网内任意两台电脑之间的信息发送和接收, 也可作为支持 200 人中小型规模的企业,企业信息平台中的一个组件及功能存在。 需要针对企业情况,考虑项目的实现框架结构及相关程序的服务支撑度及稳定性,尤其需要对程序的容错有一定考虑。

    项目要求:

                   0 、接受局域网上其他电脑的数据;

          1、发送数据给局域网上其他电脑;

          2、可以随意设置发送ip地址;

          3、程序界面及相关功能按钮

          4、发送文件

          5、保存及显示聊天记录

    开发环境:
            CentOS6、QT

    接到这个任务后,一开始准备是用 tcp 搭建服务器,然后再写客户端完成这个任务。确实也做了一个星期,大概五天吧,客户端与服务器的框架也基本搭建完了,能够实现简单的数据传输。但是突然间就不想继续做下去了,突然想试试用 udp 做做看看是什么效果,还好,没让我自己失望,很适合用 udp 做这个局域网内的即时通信软件。

    (获取用户列表,随时更新用户列表)
    使用 udp 的思路是:每当有一个客户端上线的时候,它就向局域网内广播,告知同网段内所有上线用户,然后上线用户接收到这个上线的消息后,就去自己的用户列表查看是否有这个用户,如果没有就将这个用户加到自己的用户列表,同时,它还向这个上线用户发出一个“我知道了”的消息,这时,新上线的用户收到消息后,就将这个用户加入到自己的用户列表。

    当用户下线时,它就向局域网内广播,告知所有用户“我下线了”,当其他用户接收到这个广播后,就将这个用户从用户列表内删除。因此,只能与在线用户相互传递消息。

    当需要与某以用户聊天时,只需点击显示该用户的按钮。聊天时是用 udp 直接向用户写数据。还可以直接传送文件,修改字体,颜色,查看消息记录。

    本软件未实现功能,昵称的修改,默认的所有用户的昵称均为 User ,相互之间发送表情。

    我将通信一块抽象包装在一个类中。

#include "communicate.h"


#include<QtNetwork>


Communicate::Communicate(QObject *parent) :

    QObject(parent)

{

    receiver = new QUdpSocket(this);

    send=new QUdpSocket(this);

    receiver->bind(2014,QUdpSocket::ShareAddress);     //绑定端口2014,接收信息

    connect(receiver,SIGNAL(readyRead()),this,SLOT(receiveMessage()));//udp 包装好的信号 readyRead(),当有数据传过来的时
                                                //候,就会自动产生这个信号,然后可以自定义相关的槽对接受到的数据进行处理

}
// m 是自定义个结构体,并且重载了 << 和 >> 运算符。
//发送广播消息的函数 

void Communicate::sendMulti(Message &m)

{

    qDebug()<<"sendMulti";

    QDataStream out(&datagram,QIODevice::WriteOnly);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值