小的页面还行,但是大页面,比如sina,163等,得2秒。 if(url[0] != 0 && host[0] != 0 && ip[0] != 0)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2,2);
err = WSAStartup(wVersionRequested,&wsaData);
if(err != 0)
return;
if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
{
WSACleanup();
return;
} char request[200] = "GET ";// + url + " HTTP/1.1\r\nHost:" + host + "\r\nConnection:Close\r\n\r\n";
strcat_s(request,200,url);
strcat_s(request,200," HTTP/1.1\r\nHost:");
strcat_s(request,200,host);
strcat_s(request,200,"\r\nUser-Agent:DDotNet Spider");
strcat_s(request,200,"\r\nAccept:text/html");
strcat_s(request,200,"\r\nConnection:Close\r\n\r\n");
SOCKET socketClient = socket(AF_INET,SOCK_STREAM,0);
if(socketClient == INVALID_SOCKET)
{
WSACleanup();
return;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(80);
connect(socketClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
const int MLEN = 1024 * 230;
char recvBuf[MLEN]; send(socketClient,request,strlen(request),0);
int bytesRecv = 0;
int len=0;
while(bytesRecv != SOCKET_ERROR)
{
bytesRecv = recv(socketClient,recvBuf + len,MLEN-len,0);
if(bytesRecv == 0 || bytesRecv == WSAECONNRESET)
break;
if(bytesRecv < 0)
break;
len += bytesRecv;
}
closesocket(socketClient);
WSACleanup();
m_Edit_Content.SetWindowTextA(recvBuf);

解决方案 »

  1.   

    那个MLEN多大合适? sina的首页是 213K如何从一个uri得到ip ?分可以再加。
      

  2.   

    先分析出域名,然后用 gethostbyname
      

  3.   

    可以做成缓冲池,n个数组。比如10个64K的。recv发现已有10个数组640K都装不下,就new更多个(比如再加10个64K的)出来。
      

  4.   

    ip的搞定了gethostbynamejazy() 你说的不太明白,能给个代码看看吗?还有现在主要解决的就是速度的问题。
      

  5.   

    奇怪,这个东西需要对比吗,除非你用IE打开就很快比你的sock更快,那就说明你的可能需要优化,(IE内部可能不是直接走sock,微软自己的东西,也许还有其他的方法).否则就没有这个必要