资源简介
使用Qt写的局域网聊天程序。
以GPLv3许可证发布。
代码片段和文件信息
#include “clientsocket.h“
#include
#include
#include
ClientSocket::ClientSocket(Database *dba QMap *idToSocketa Qobject *parent) :
QTcpSocket(parent) nextBlockSize(0) in(this)
{
//初始化数据库和idsocket映射
db = dba;
idToSocket = idToSocketa;
nextBlockSize = 0;
in.setVersion(QDataStream::Qt_4_7);
connect(this SIGNAL(readyRead()) this SLOT(readClient()));
connect(this SIGNAL(disconnected()) this SLOT(deleteLater()));
}
void ClientSocket::readClient()
{
// bool sign = false;
forever
{
//新消息
if(nextBlockSize == 0)
{
if(bytesAvailable() < sizeof(quint16))
break;
in >> nextBlockSize;
// sign = true;
}
//消息未读完
if(bytesAvailable() < nextBlockSize)
break;
in >> msgHead;
qDebug() << “--------------------“ << endl
<<“Message Head: “ << endl
<< “SENDER:“ << msgHead.sender << endl
<<“RECIVER“ << msgHead.receiver << endl
<<“MSGTYPE:“ << resolve(msgHead.msgtype) < <<“--------------------“ << endl;
msgProcessor();
nextBlockSize = 0;
}
}
QString ClientSocket::resolve(ServerMsgType type)
{
switch(type)
{
case REG_REQ:
return “REG_REQ“;
break;
case CAG_PASSWD:
return “CAG_PASSWD“;
case CAG_NICKNAME:
return “CAG_NICKNAME“;
case CAG_SIGNATURE:
return “CAG_SIGNATURE“;
case LOGIN_REQ:
return “LOGIN_REQ“;
case LOGOUT_REQ:
return “LOGOUT_REQ“;
case DECADDFRI_REQ:
return “DECADDFRI_REQ“;
case DECDELFRI_REQ:
return “DECDELFRI_REQ“;
case ANSADDFRI_REQ:
return “ANSADDFRI_REQ“;
case REQ_UNREAD:
return “REQ_UNREAD“;
case FRILIST_REQ:
return “FRILIST_REQ“;
case CONV_MSG:
return “CONV_MSG“;
default:
return “UNKNOWN Message Type!“;
}
}
void ClientSocket::msgProcessor()
{
//read Msg Head
//handle msg
switch(msgHead.msgtype)
{
case REG_REQ:
handleRegisterMsg();
break;
case CAG_PASSWD:
handleUpdPasswd();
break;
case CAG_NICKNAME:
handleUpdNicknameMsg();
break;
case CAG_SIGNATURE:
handleUpdSignatureMsg();
break;
case LOGIN_REQ:
handleLoginMsg(); //在id-socket映射中加入一个记录
break;
case LOGOUT_REQ: //在id-socket映射中删除一个记录
handleLogoutMsg();
break;
case DECADDFRI_REQ:
handleAddFriReqMsg();
break;
case DECDELFRI_REQ:
handleDelFriMsg();
break;
case ANSADDFRI_REQ:
handleReplyAddFriReqMsg();
break;
case REQ_UNREAD:
handleQueryUnreadMsg();
break;
case FRILIST_REQ:
handleGetFriListMsg();
break;
case CONV_MSG:
- 上一篇:YOLO快速图像标注工具
- 下一篇:人工智能学习思维导图
相关资源
- KinectV2 opencv qt 实现平面测量
- Reciprocal Velocity Obstacles for Real-Time Mu
- 锐起无盘IMG加载工具
- ePHASORsim IEEE39节点 数据和说明文件
- Qimage.rar
- Qt自定义继承QOpenGLWidget的类进行绘图
- CvvImage类
- QT通过qwt实现曲线动态显示
- 15KW充电模块psim仿真PFC_LLC
- QTP测试计算器的小
- N皇后问题答案求解QT实现带源码
- RAIM GPS接收机自主完好性监测算法
- Nimda蠕虫病毒样本
- 基于QZXing的简单二维码扫描
- QT可动态添加、删除控件的小项目
- 通过NIM的 mksysb快速安装恢复系统
- VMware-VIMSetup-all-5.1.0-880471.iso 地址
- QT程序自启动
-
Context-ba
sed Adaptive Lossless Image Codin - qt 多线程 防止主线程做循环操作导致
- NGSIM FLS.pdf
- 基于Multisim8的简易数字频率计仿真
- Qt自定义搜索框代码实现
- 用QT自己写的贪吃蛇源代码
- Qt调用日历
- JPEG图像压缩编码及解码源代码可定图
- 2d simple cfd c代码
- OFDM时空编码和MIMO的结合在瑞丽频率选
- mimo-ofdm系统
- 操作系统进程管理与内存管理QT实现界
评论
共有 条评论