如何用c语言编写QQ聊天程序(源代码)

想要得到程序代码... 想要得到程序代码 展开
 我来答
micckkk
2018-05-23 · TA获得超过118个赞
知道答主
回答量:51
采纳率:66%
帮助的人:14.3万
展开全部

main.cpp

#include <QCoreApplication>    
#include <QTime>    
#include "icqserver.h"    
#include "global.h"    
int main(int argc, char *argv[])    
{    
QTime midnight(0,0,0);    
qsrand(midnight.secsTo(QTime::currentTime()));    
User user;    
user.login = "DrSmyrke";    
user.nikName = user.login;    
user.pass = "123456";    
user.type = icq_user_ICQ;    
app::users.push_back(user);    
QCoreApplication a(argc, argv);    
ICQServer 锋渗郑server;    
server.init();    
return a.exec();    
}

globla.cpp

#include "global.h"    
#include <QIODevice>    
#include <QDataStream>    
#include <QCryptographicHash>    
//TODO: remove qDEbug    
#include <QDebug>    
namespace app {    
std::vector<User> users;    
ServerSettings settings;    
bool isUser(const QByteArray &login)    
{    
for(auto elem:app::users){    
if(elem.login == login){    
return true;    
break;    
}    
}    
return false;    
}    
void setPassKey(const QByteArray &login, const QByteArray &passKey)    
{    
for(auto &elem:app::users){    
if(elem.login == login){    
elem.passKey = passKey;    
break;    
}    
}    
}    
bool chkPass(const QByteArray &login, const QByteArray &pass)    
{    
for(auto elem:app::users){    
if(elem.login == login){    
auto myPass = mf::md5(elem.passKey+elem.pass+"AOL Instant Messenger (SM)");    
auto myPass2 = mf::md5(elem.passKey+mf::md5(elem.pass)+"AOL Instant Messenger (SM)");    
if( myPass == pass or myPass2 == pass ) return true;    
break;    
}    
}    
return false;    
}    
void setCookie(const QByteArray &login, const QByteArray &cookie)    
{    
for(auto &elem:app::users){    
if(elem.login == login){    
elem.cookie = cookie;    
break;    
}    
}    
}    
bool chkCookie(const QByteArray &cookie)    
{    
for(auto &elem:app::users){    
if(elem.cookie == cookie){    
return true;    
break;    
}    
}    
return false;    
}    
QByteArray getLogin(const QByteArray &cookie)    
{    
QByteArray ba;    
for(auto elem:app::users){    
if(elem.cookie == cookie){    
ba.append(elem.login);    
break;    
}    
}    
return ba;    
}    
unsigned int 喊基getUserType(const QByteArray &login)    
{    
unsigned int type;    
for(auto elem:app::users){    
if(elem.login == login){    
type = elem.type;  银颂  
break;    
}    
}    
return type;    
}    
void setIP(const QByteArray &cookie, const QHostAddress &addr)    
{    
for(auto &elem:app::users){    
if(elem.cookie == cookie){    
elem.ip = addr;    
break;    
}    
}    
}    
QByteArray getIPhex(const QByteArray &login)    
{    
QByteArray ba;    
for(auto elem:app::users){    
if(elem.login == login){    
QByteArray tmp;    
for(auto byte:elem.ip.toString().split(".")){    
tmp[0] = byte.toUInt();    
ba.append(tmp);    
}    
break;    
}    
}    
return ba;    
}    
QByteArray getNikname(const QByteArray &login)    
{    
QByteArray ba;    
for(auto elem:app::users){    
if(elem.login == login){    
ba.append(elem.nikName);    
break;    
}    
}    
return ba;    
}    
}    
namespace mf {    
QByteArray toBigEndianInt(const int val)    
{    
QByteArray bytes(4, 0x00);    
QDataStream stream(&bytes, QIODevice::WriteOnly);    
stream.setByteOrder(QDataStream::BigEndian);    
stream << val;    
bytes.resize(4);    
return bytes;    
}    
QByteArray toBigEndianShort(const short val)    
{    
QByteArray bytes(2, 0x00);    
QDataStream stream(&bytes, QIODevice::WriteOnly);    
stream.setByteOrder(QDataStream::BigEndian);    
stream << val;    
bytes.resize(2);    
return bytes;    
}    
unsigned int getRand(const int max)    
{    
return qrand() % max;    
}    
QByteArray md5(const QByteArray &string)    
{    
return QCryptographicHash::hash(string,QCryptographicHash::Md5);    
}    
}

global.h

#ifndef GLOBAL_H    
#define GLOBAL_H    
#include <QByteArray>    
#include <QString>    
#include <QHostAddress>    
typedef enum{    
icq_user_notReg = 0x01,    
icq_user_admin = 0x02,    
icq_user_AOL = 0x04,    
icq_user_premium = 0x08,    
icq_user_AIM = 0x10,    
icq_user_sleep = 0x20,    
icq_user_ICQ = 0x40,    
icq_user_mobile = 0x80,    
}icq_user_types;    
struct User{    
QByteArray login;    
QByteArray nikName;    
QByteArray pass;    
QByteArray passKey;    
QByteArray cookie;    
unsigned int type;    
QHostAddress ip;    
};    
struct ServerSettings{    
unsigned short maxContactListSize = 100;    
unsigned short maxOnlineContactListSize = 50;    
unsigned short maxFantomListSize = 10;    
};    
namespace app {    
extern std::vector<User> users;    
extern ServerSettings settings;    
/**    
 * @brief isUser    
 * Проверяет наличие пользователя в базе    
 * @return    
 * true, если пользователь присутствует; иначе false    
 */    
bool isUser(const QByteArray &login);    
/**    
 * @brief setPassKey    
 * @param login    
 * @param passKey    
 */    
void setPassKey(const QByteArray &login, const QByteArray &passKey);    
/**    
 * @brief setCookie    
 * Устанавливает куки для пользователя    
 * @param login    
 * @param cookie    
 */    
void setIP(const QByteArray &cookie, const QHostAddress &addr);    
void setCookie(const QByteArray &login, const QByteArray &cookie);    
/**    
 * @brief chkPass    
 * Проверяет соответствие пароля пользователя в базе с тем, что пришел    
 * @return    
 * true, если пароль верен; иначе false    
 */    
bool chkPass(const QByteArray &login, const QByteArray &pass);    
bool chkCookie(const QByteArray &cookie);    
QByteArray getLogin(const QByteArray &cookie);    
QByteArray getIPhex(const QByteArray &login);    
QByteArray getNikname(const QByteArray &login);    
unsigned int getUserType(const QByteArray &login);    
}    
namespace mf {    
QByteArray toBigEndianInt(const int val);    
QByteArray toBigEndianShort(const short val);    
unsigned int getRand(const int max);    
QByteArray md5(const QByteArray &string);    
}    
#endif // GLOBAL_H

icqclient.cpp

超过可回答的最大字当我,想要更多更详细代码可以私信我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DDoS数据库
2018-05-22
知道答主
回答量:1
采纳率:0%
帮助的人:864
展开全部
QQ的找回密码代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式