资源简介
使用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快速图像标注工具
- 下一篇:人工智能学习思维导图
相关资源
- 酒店管理系统基于Qt Creator5)
- 基本放大电路multisim仿真.ms14
- CanuMobiSim
- Apolipoprotein E4 Impairs in vivo Hippocampal
-
imx6qSBP的jli
nk初始化脚本 - uboot到linux logo显示不间断 补丁
- IMX385驱动代码.zip
- sony_imx385.zip
- jstl-api-1.2和jstl-impl-1.2
- Crystal Impact Match!2.1.3 试用延长
- 基于MFC扩展CListCtrl子项显示图片并叠
- WINDOWS98启动盘镜像Win98.IMA
- vtk QT做的三维地质可视化系统2of2
- Img2Lcd(将图片转换为数组的工具)
- YS
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
-
simuli
nk 课程设计 qpsk - VESA Computer Display Monitor Timing (DMT)
- C 餐厅叫号系统(QT平)
- SIM908 SDIO FSMC STM32 FIFO
- QT 实现文件下载
- qt图像处理
- QT,JPEG解码源代码(已完成)
- Multisim 10 阶梯波电路
- ModelSim全套中文手册ModelSim SE6.0C
- prim和kruskal算法求最小生成树262629
- Qt 播放音频文件
评论
共有 条评论