全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2406
推到 Plurk!
推到 Facebook!

[vc] 請高手幫幫改良一下這個程式

尚未結案
walterwong522
一般會員


發表:1
回覆:0
積分:0
註冊:2007-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-14 21:10:46 IP:218.190.xxx.xxx 訂閱
#pragma comment(lib, "ws2_32.lib")
#include
#define _WIN32_WINNT 0x0400
#include "windows.h"
#include "iostream.h"
#include
#include "stdio.h"
#define MAX_LINE_LEN 250
char sLine[MAX_LINE_LEN];
FILE *fp,*infile;
char lpbuf[4096]={0},sendhttp[4096]={0};



////////////////////////////
void conect(char ipstr[250],char ip[250] ,char filename[250])
{

printf("ipstr : %s\n" , ipstr);

strcat(filename,".ini");
//printf("%s\n",filename);
strcpy(sendhttp,"GET ");
strcat(sendhttp,ipstr);
strcat(sendhttp," HTTP/1.0\r\n"); //http://?
strcat(sendhttp,ip); //ip
strcat(sendhttp,"\r\n");
strcat(sendhttp,"Connection:Keep-Alive\r\n\r\n");



//strcat(sendhttp,"Content-Type: text/html \r\n\r\n");

/////////////////////////////////////////////////////////
WSADATA ws;
SOCKET csock;
int error = WSAStartup(MAKEWORD(2,0), &ws);
csock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in intSaddr; //建立sockaddr_in結構體變數 intSaddr
memset((char *) &intSaddr,0,sizeof(intSaddr)); //清空intSaddr
u_long inetAddr = inet_addr(ip);
//設定連接地址64.233.189.104 hk google 64.233.183.147
// yahoo 202.43.220.99 百度 202.108.22.44
//youtube 208.65.153.251
intSaddr.sin_family =AF_INET; //通訊協議
intSaddr.sin_port =htons((u_short)80); //服務port
intSaddr.sin_addr.s_addr =inetAddr; //ip地址
if(connect(csock,(struct sockaddr *)&intSaddr,sizeof(intSaddr))==0)
{
//printf("YES\n");
send(csock,sendhttp,sizeof(sendhttp),0);
for(; ; )
{
recv(csock,lpbuf,sizeof(lpbuf),0);
int len = strlen(lpbuf);
if( len > 0 )
{
//printf("%s\n",lpbuf);

fp=fopen(filename,"a ");
fprintf(fp,"%s",lpbuf);
len = 0;
memset(lpbuf,0,sizeof(lpbuf));
fclose(fp);
}
// len <= 0
else {
closesocket(csock);

WSACleanup();
return ;
}
//end for
}
// 連接不成功
}





///////////////////////////



closesocket(csock);

WSACleanup();
return;
}
int main ()
{


char ip[250]={0};
SYSTEMTIME systime;
GetLocalTime(&systime);
srand( systime.wSecond);
unsigned int r1 = rand() % 256;
unsigned int r2 = rand() % 256;
unsigned int r3 = rand() % 256;
unsigned int r4 = rand() % 256;
sprintf(ip,"%d.%d.%d.%d",r1,r2,r3,r4);




char timebuf[512]={0};

int year = systime.wYear;
int month = systime.wMonth;
int day = systime.wDay;
int hour = systime.wHour;
int minute = systime.wMinute;
int second = systime.wSecond;
int wMilliseconds = systime.wMilliseconds;
sprintf(timebuf, "%d%d%d%d%d%d%d",year,month,day,hour,minute,second,wMilliseconds);
//printf("%s\n",timebuf);

char ipstr[250]={0};
strcpy(ipstr,"http://");
strcat(ipstr,ip);
strcat(ipstr,"/index.html");
//printf("%s\n%s\n%s\n",ipstr,ip,timebuf);




//設定連接地址64.233.189.104 hk google 64.233.183.147


//百度 202.108.22.44 yahoo 202.43.220.99
//香港討論區 59.188.17.132
//p2p 202.181.195.17

strcpy(ip,"202.181.195.17");

strcpy(ipstr,"http://");
strcat(ipstr,ip);
strcat(ipstr,"/index.html");


conect(ipstr,ip,timebuf);


Sleep(10);
cin.get();
return 0;
}


這個程式是可以下載到百度index.html的所有html 碼 但連上其他網頁時如這個網站 就不知道為何總是下載到一些不知道所謂的html碼 !



我是想做個可以取得html碼的 蜘蛛程式 但最多做成以上的模樣 請高手幫我改良一下 謝謝啦! 跪求呀!!!







這個程式的問題如下:
取網頁時 有一些網頁 的html碼不完整!
yckuo
高階會員


發表:55
回覆:389
積分:238
註冊:2003-03-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-14 22:06:03 IP:220.132.xxx.xxx 未訂閱
你的問題不是要人家幫你改良程式.
你要寫 spider 那你該去研讀 http://www.w3.org/Protocols/ , 瞭解 HTTP PROTOCOL 那你就會瞭解,
為何抓本站的東西取得的不是 HTML 碼.

PS: 請不要拿本站當實驗對像.
------
yckuo
系統時間:2024-05-04 14:42:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!