QT网盘项目—客户端

  中心处理模块 

中心处理模块,负责进行对网络模块接受的数据进行分析,并通过信号和槽机制通知ui界面等模块进行操作

#include "kernel.h"
#include"QDebug"
Kernel::Kernel(QObject *parent)
    : QObject{parent}
{
    m_TCPnet=new TCPnet(this);
    m_server=new Server(this);
}
Kernel::~Kernel()
{
    delete m_TCPnet;
    delete m_server;
}

bool Kernel::connect(const char *szip, short port)
{
    if(!m_TCPnet->connectServer(szip,port))return false;
    if(!m_server->initNetWork("127.0.0.1",8899))return false;
    return true;
}

void Kernel::disconnect(const char *error)
{
    m_TCPnet->disconnect(error);
    m_server->unitNetWork(error);
}

bool Kernel::sendData(const char *buf, int size)
{
    if(m_TCPnet->sendData(buf,size))return true;
    return false;
}

void Kernel::deal_data(const char *buf)
{
    switch(*buf){
    case _default_protocol_register_rs:
        emit signal_regist((STRU_REGISER_RS *)buf);
        break;
    case _default_protocol_login_rs:
        emit signal_log_in((STRU_LOGIN_RS*)buf);
        break;
    case _default_protocol_getfilelist_rs:
        emit signal_get_file((STRU_GETFILELIST_RS*)buf);
        break;
    case _default_protocol_sendfileinfo_rs:
        emit signal_get_file_res((STRU_FILEINFO_RS*)buf);
        break;
    case _default_protocol_sharelink_rs:
        emit signal_share_link((STRU_SHARELINK_RS*)buf);
        break;
    case _default_protocol_getlink_rs:
        emit signal_get_link((STRU_GETLINK_RS*)buf);
        break;
    }
}

void Kernel::deal_html(const char *buf)
{
    QString str=buf;
    qDebug()<<str;
    str=str.section("text=",-1);
    qDebug()<<str;
    emit signal_html(str);
}

网络处理模块    

网络处理模块,这里采用了TCP去进行连接,创建 连接 发送以及接收数据,并将接受的数据交给控制模块去处理,向外提供一个虚基类指针负责使用模块内部分函数

#include "tcpnet.h"


TCPnet::TCPnet(IKernel * kernel) {
    m_flag=true;
    customer=0;
    net_kernel=kernel;
}
TCPnet::~TCPnet()
{

}

bool TCPnet::connectServer(const char *szip, short port)
{

    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD(2, 2);

    err = WSAStartup(wVersionRequested, &wsaData);
    if (err != 0) {

        printf("WSAStartup failed with error: %d\n", err);
        return false;
    }
    if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {

        disconnect("Could not find a usable version of Winsock.dll\n");
        return false;
    }
    else
        printf("The Winsock 2.2 dll was found okay\n");

    customer=socket(AF_INET,SOCK_STREAM,0);
    if(customer== INVALID_SOCKET){
       disconnect("socket_error");
        return false;
    }
    sockaddr_in idear;
    int size=sizeof(idear);
    idear.sin_port=htons(port);
    idear.sin_family=AF_INET;
    idear.sin_addr.S_un.S_addr=inet_addr(szip);
    if(SOCKET_ERROR==connect(customer,(struct sockaddr*)&idear,size)){
        disconnect("connnect_error");
        return false;
    }
    m_thread=CreateThread(0,0,&threadproc,this,0,0);
    return true;
}
DWORD TCPnet::threadproc(LPVOID lpvoid){
    TCPnet *pthis=(TCPnet *) lpvoid;
    pthis->recvData();
    return 0;
}
void TCPnet::disconnect(const char * err
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值