2014-06-03:判断是否在同一网段

1.修改群消息下载图片保存位置;

QString tmpImg = tr("%1/%2/Tmp/%3").arg(GlobalData::seaarespath).arg(GlobalData::myself->Id).arg(mgtio.Group_File_Name);

2.制作点对点聊天客户端(是否在同一网段);

 

服务器端:

clientsocket.cpp(void ClientSocket::receiveMessage())

else if(IS_SAME_NETWORK == type)
{
save = new RMessage_IsSameNetwork(IS_SAME_NETWORK);
in >> (RMessage_DELETE_FRIEND&)*save;
}
 

clientsocket.cpp(void ClientSocket::handleMessage(MessageBase *temp))

        else if(IS_SAME_NETWORK == temp->m_type)
        {
            result = MysqlPool::GetInstance()->checkIpIsSameNetwork(temp);
            if( SAME_NETWORK == result )
            {
                qDebug() << "result is SAME_NETWORK";
                out << result;
                out << (RMessage_IsSameNetwork&)*temp;
            }
        }
mysqlpool.cpp

qint32 MysqlPool::checkIpIsSameNetwork(MessageBase *save)
{
    qDebug() << Q_FUNC_INFO;
    Sqlhelper help;
    if(!help.succ())
        return DB_ERROR;
    RMessage_IsSameNetwork* msg = dynamic_cast<RMessage_IsSameNetwork*>(save);
    OnlineUserIP toUser, fromUser;
    PreparedStatement* query = help.getpst("select UserIP, InnerIP from OnlineUser where OnlineUserId = ?");
    query->setString(1, qPrintable(msg->fromId));
    std::auto_ptr<ResultSet> rse(query->executeQuery());
    if(rse.get())
    {
        if(rse->next())
        {
            fromUser.UserIP = QString::fromStdString(rse->getString(1));
            fromUser.InnerIP = QString::fromStdString(rse->getString(2));
        }
    }
    PreparedStatement* query1 = help.getpst("select UserIP, InnerIP from OnlineUser where OnlineUserId = ?");
    query1->setString(1, qPrintable(msg->toId));
    std::auto_ptr<ResultSet> rse1(query1->executeQuery());
    if(rse1.get())
    {
        if(rse1->next())
        {
            toUser.UserIP = QString::fromStdString(rse1->getString(1));
            toUser.InnerIP = QString::fromStdString(rse1->getString(2));
        }
    }
    if(fromUser.UserIP == toUser.UserIP)
    {
        if( fromUser.InnerIP.left(fromUser.InnerIP.size() - fromUser.InnerIP.lastIndexOf('.') - 1) ==
                toUser.InnerIP.left(toUser.InnerIP.size() - toUser.InnerIP.lastIndexOf('.') - 1) )
        {
            return SAME_NETWORK;
        }
        else
        {
            return NOT_SAME_NETWORK;
        }
    }
    else
    {
        return NOT_SAME_NETWORK;
    }
}
constant.h

class RMessage_IsSameNetwork: public MessageBase
{
public:
    QString toId;
    QString fromId;
    RMessage_IsSameNetwork(){}
    RMessage_IsSameNetwork(int type = IS_SAME_NETWORK){m_type = type;}
    friend QDataStream& operator <<(QDataStream& qos,const RMessage_IsSameNetwork& ss)
    {
        qos <<ss.toId << ss.fromId;
        return qos;
    }
    friend QDataStream& operator >> (QDataStream &qis, RMessage_IsSameNetwork& ss)
    {
        qis >> ss.toId >> ss.fromId;
        return qis;
    }
};

struct OnlineUserIP
{
    QString UserIP;
    QString InnerIP;
};

mysqlpool.cpp(enum ReplyType)

SAME_NETWORK,
NOT_SAME_NETWORK
mysqlpool.cpp(enum MessageType)
IS_SAME_NETWORK




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值