/** * test case for getDNS() functions */ void TestEthernet::tcGetDNS(void) { cout << "获取DNS服务:" << endl; cout << "参数为空时 :" <<endl; char *strPreferred = NULL; char *strAfternative = NULL; if (0 != getDNS(strPreferred, strAfternative)) { cout << "获取DNS服务成功!" << endl; cout << "strPreferred :" << endl; cout << "strAfternative :" << endl; } else { cout << "获取DNS服务失败!" << endl; } cout << "参数不为空时 :" <<endl; char strPreferred1[] = "Preferred"; char strAfternative1[] = "strAfternative"; cout << "before getDNS():" << endl; cout << "strPreferred :" << endl; cout << "strAfternative :" << endl; cout << "After getDNS():" << endl; if (0 != getDNS(strPreferred1,strAfternative1)) { cout << "获取DNS服务成功!" << endl; cout << "strPreferred :" << endl; cout << "strAfternative :" << endl; } else { cout << "获取DNS服务失败!" << endl; } }
bool SVT_HttpDownload::getHttpFileProcess() { QFile f(mLocalFile); QIODevice::OpenMode mode=(mStartPos>0)?(QIODevice::WriteOnly|QIODevice::Append):QIODevice::WriteOnly; if(!f.open(mode)) { mErrorStr="Can Not Open Local File"; return false; } QByteArray arraybuffer; QUrl url(mUrl); SVT_IpAddress ip = getDNS(url.host()); if(!ip.isValid()) { mErrorStr="DNS Error"; return false; } SVT_TcpSocket tcp_sock; char recv_buff[1024] = {0}; QString request = "GET %1 HTTP/1.1\r\nConnection: Keep-Alive\r\nHost: %2\r\nRange: bytes=%3-\r\n\r\n"; request = request.arg(url.path(), url.host()).arg(mStartPos); const QByteArray reqarray = request.toAscii(); _SpeedCalculater speedCalc(200); bool headOk=false; quint64 total=0; quint64 processed=0; if(DO_AND_CHECKEXIT(tcp_sock.create()) &&DO_AND_CHECKEXIT(tcp_sock.connect(ip,url.port(80))) &&(DO_AND_CHECKEXIT(tcp_sock.waitForWriteReady(1000)) ||DO_AND_CHECKEXIT(tcp_sock.waitForWriteReady(1000)) ||DO_AND_CHECKEXIT(tcp_sock.waitForWriteReady(1000)) ||DO_AND_CHECKEXIT(tcp_sock.waitForWriteReady(1000)) ) &&DO_AND_CHECKEXIT(reqarray.size()==tcp_sock.sendData(reqarray.data(),reqarray.size()) ) ) { QDateTime ti_last_signal=QDateTime::currentDateTime().addYears(-1); while(!CAN_EXIT) { int readedtemp ; if( (readedtemp= tcp_sock.recvData(recv_buff, sizeof(recv_buff)) ) <=0) { break; } if(!headOk) { arraybuffer.append(recv_buff,readedtemp); int bound=getHttpHeaderBound(arraybuffer); if(bound >=0) { total=getRecvFileSize(arraybuffer); arraybuffer.remove(0,bound); f.write(arraybuffer); processed=arraybuffer.count(); // if(total <= 0) // { // mErrorStr="Wrong Total Size"; // return false; // } speedCalc.init(); headOk=true; } } else { processed+=readedtemp; f.write(recv_buff,readedtemp); if(ti_last_signal.addMSecs(200) < QDateTime::currentDateTime()) { speedCalc.addData(processed); ti_last_signal=QDateTime::currentDateTime(); emit progress(mStartPos+processed, total, speedCalc.calculateSpeed()); } } } } f.close(); return (!total ||total==processed); }