一个textbox,一个按钮两个控件,点按钮获得百度首页的网页源码在textbox中 用Socket实现我找了一个有dll,看不懂请帮忙写一个吗,越简单越好,十分感谢,分不够再加 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CSocket skt; skt.Create(); CString tmp; char* buffer=new char[4096]; int n; CString http,html; http="GET / HTTP/1.1\r\n"; http+="Host: 119.75.213.61\r\n"; http+="Accept: */*\r\n"; http+="\r\n\r\n"; n=http.GetLength(); while(1) { if(!skt.Connect("119.75.213.61",80))break; if(skt.Send(http.GetBuffer(),n)<n)break; html=""; while((n=skt.Receive(buffer,4000))>0) { buffer[n]=0; tmp.Format("%s",buffer); html+=tmp; if(html.Find("</HTML>")>0)break; } } 我试了一下楼上的代码,没错误,但是if(!skt.Connect("119.75.213.61",80))break;这句就是过不去,连接不上哎 #include <stdio.h> #include <winsock.h> #include <string.h> #pragma comment(lib, "ws2_32.lib") void geturl(char *url) { WSADATA WSAData={0}; SOCKET sockfd; struct sockaddr_in addr; struct hostent *pURL; char myurl[BUFSIZ]; char *pHost = 0, *pGET = 0; char host[BUFSIZ], GET[BUFSIZ]; char header[BUFSIZ] = ""; static char text[BUFSIZ]; int i; /* * windows下使用socket必须用WSAStartup初始化,否则不能调用 */ if(WSAStartup(MAKEWORD(2,2), &WSAData)) { printf("WSA failed\n"); return; } /* * 分离url中的主机地址和相对路径 */ strcpy(myurl, url); for (pHost = myurl; *pHost != '/' && *pHost != '\0'; ++pHost); if ( (int)(pHost - myurl) == strlen(myurl) ) strcpy(GET, "/"); else strcpy(GET, pHost); *pHost = '\0'; strcpy(host, myurl); printf("%s\n%s\n", host, GET); /* * 设定socket参数,并未真正初始化 */ sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); pURL = gethostbyname(host); addr.sin_family = AF_INET; addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr); addr.sin_port = htons(80); /* * 组织发送到web服务器的信息 * 为何要发送下面的信息请参考HTTP协议的约定 */ strcat(header, "GET "); strcat(header, GET); strcat(header, " HTTP/1.1\r\n"); strcat(header, "HOST: "); strcat(header, host); strcat(header, "\r\nConnection: Close\r\n\r\n"); /* * 连接到服务器,发送请求header,并接受反馈(即网页源代码) */ connect(sockfd,(SOCKADDR *)&addr,sizeof(addr)); send(sockfd, header, strlen(header), 0); while ( recv(sockfd, text, BUFSIZ, 0) > 0) { printf("%s", text); strnset(text, '\0', BUFSIZ); } closesocket(sockfd); WSACleanup(); } int main() { char url[256]; printf("http://"); scanf("%s", url); geturl(url); return 0; } http协议是典型的短连接应用你用哪个socket发送http请求,服务器就会往哪个socket回复html数据,并close你应该弄个定时器,每两分钟创建一个子线程,将创建socket、连接、发送、接收、关闭这一连串操作全部放进子线程,子线程最后将结果PostMessage到主线程主线程只需要两个消息响应函数,一个处理定时器,一个处理子线程Post出来的数据 关于智能指针计数的问题 关于CFileException 技能交换,想学习win32 sdk,以delphi+数据库技能互相学习 如何在Edit中制作字母下划线标明显示,类似于office中那个检索单词那种 给自写的ACTIVE控件添加右键菜单 一条SQL语句在VC中不能用的问题 如何得到一个应用程序的文件名? 管道为何死了(100分) 多线程如何实现几个函数必须顺序一起执行。 msdn有中文版下载吗? 新手。求教。windows程序设计第五版。 在一个头文件中定义了一些宏 把改头文件删了 还是提示有宏
CSocket skt;
skt.Create(); CString tmp;
char* buffer=new char[4096];
int n;
CString http,html; http="GET / HTTP/1.1\r\n";
http+="Host: 119.75.213.61\r\n";
http+="Accept: */*\r\n";
http+="\r\n\r\n"; n=http.GetLength(); while(1)
{
if(!skt.Connect("119.75.213.61",80))break;
if(skt.Send(http.GetBuffer(),n)<n)break;
html="";
while((n=skt.Receive(buffer,4000))>0)
{
buffer[n]=0;
tmp.Format("%s",buffer);
html+=tmp;
if(html.Find("</HTML>")>0)break;
}
}
if(!skt.Connect("119.75.213.61",80))break;
这句就是过不去,连接不上哎
#include <stdio.h>
#include <winsock.h>
#include <string.h>
#pragma comment(lib, "ws2_32.lib") void geturl(char *url)
{
WSADATA WSAData={0};
SOCKET sockfd;
struct sockaddr_in addr;
struct hostent *pURL;
char myurl[BUFSIZ];
char *pHost = 0, *pGET = 0;
char host[BUFSIZ], GET[BUFSIZ];
char header[BUFSIZ] = "";
static char text[BUFSIZ];
int i; /*
* windows下使用socket必须用WSAStartup初始化,否则不能调用
*/
if(WSAStartup(MAKEWORD(2,2), &WSAData))
{
printf("WSA failed\n");
return;
} /*
* 分离url中的主机地址和相对路径
*/
strcpy(myurl, url);
for (pHost = myurl; *pHost != '/' && *pHost != '\0'; ++pHost);
if ( (int)(pHost - myurl) == strlen(myurl) )
strcpy(GET, "/");
else
strcpy(GET, pHost);
*pHost = '\0';
strcpy(host, myurl);
printf("%s\n%s\n", host, GET); /*
* 设定socket参数,并未真正初始化
*/
sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
pURL = gethostbyname(host);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);
addr.sin_port = htons(80); /*
* 组织发送到web服务器的信息
* 为何要发送下面的信息请参考HTTP协议的约定
*/
strcat(header, "GET ");
strcat(header, GET);
strcat(header, " HTTP/1.1\r\n");
strcat(header, "HOST: ");
strcat(header, host);
strcat(header, "\r\nConnection: Close\r\n\r\n"); /*
* 连接到服务器,发送请求header,并接受反馈(即网页源代码)
*/
connect(sockfd,(SOCKADDR *)&addr,sizeof(addr)); send(sockfd, header, strlen(header), 0); while ( recv(sockfd, text, BUFSIZ, 0) > 0)
{
printf("%s", text);
strnset(text, '\0', BUFSIZ);
} closesocket(sockfd); WSACleanup();
} int main()
{
char url[256];
printf("http://");
scanf("%s", url);
geturl(url);
return 0;
}
你用哪个socket发送http请求,服务器就会往哪个socket回复html数据,并close你应该弄个定时器,每两分钟创建一个子线程,将创建socket、连接、发送、接收、关闭这一连串操作全部放进子线程,子线程最后将结果PostMessage到主线程主线程只需要两个消息响应函数,一个处理定时器,一个处理子线程Post出来的数据