已有代码如下
#include <winsock2.h> 
#include <windows.h> 
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc,char* argv[]) 
{char server_name[256]="zhidao.baidu.com"; WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) { 
WSACleanup();return-1; 
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);if (cli_sock==INVALID_SOCKET)return-1;// connect to server 
srv_addr.sin_family= AF_INET; 
LPHOSTENT lphost= gethostbyname(server_name);if (lphost!= NULL) 
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr; 
srv_addr.sin_port= ntohs(80);if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR){return-1; 
}
//char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
char sz[]="GET /question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz)-1,0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[1024]={0};
while( SOCKET_ERROR!= retval ){ 
retval= recv(cli_sock ,buffer,1000,0); 
printf("%s\n",buffer); 

closesocket(cli_sock);
return 0; 
} 问题是现在返回的包里面汉字仅是百度知道的相关问题,没有该问题的 最佳答案不知道是动态加载还是什么的如果能get得到的包中去掉字符,只留下汉字最好如果 不能用socket get,最好给个小例子

如能解决,给大牛1000分做膜拜礼

解决方案 »

  1.   

    如果返回数据是gzip之类的压缩数据要解压的
    你可以用http1.0试试
    用winet api的话就不用自己解压数据了
      

  2.   

    我测试过了 是可以返回答案数据的#include <iostream>
    #include <string>
    #include <vector>
    #include <winsock2.h> 
    #include <stdio.h>
    #pragma comment(lib, "ws2_32.lib")int main(int argc,char* argv[]) 
    {
    char server_name[256]="zhidao.baidu.com";  WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) 

    WSACleanup();return-1; 
    }  SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);
    if (cli_sock==INVALID_SOCKET)
    return-1;// connect to server 
    srv_addr.sin_family= AF_INET; 
    LPHOSTENT lphost= gethostbyname(server_name);
    if (lphost!= NULL) 
    srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr; 
    srv_addr.sin_port= ntohs(80);
    if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR)
    {
    return-1; 
    }
    //char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
    char sz[]="GET http://zhidao.baidu.com/question/94111357.html HTTP/1.0\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n";
    int retval= send(cli_sock,sz,sizeof(sz),0);
    if( SOCKET_ERROR== retval )
    return 0;
    char buffer[50000+1]={0};
    int nTotal=0;
    while( SOCKET_ERROR!= retval ){ 
    retval= recv(cli_sock ,buffer+nTotal,50000,0);
    if (retval<=0)
    {
    break;
    }
    nTotal+=retval;


    closesocket(cli_sock);
    buffer[nTotal]=0;
    printf("%s\n",buffer); 
    system("pause");
    return 0; 

      

  3.   

    char server_name[256]= "zhidao.baidu.com";
    WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) { 
    WSACleanup();return-1; 
    }  SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);if (cli_sock==INVALID_SOCKET)return-1;// connect to server 
    srv_addr.sin_family= AF_INET; 
    LPHOSTENT lphost= gethostbyname(server_name);
    if (lphost!= NULL) 
    srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr; 
    srv_addr.sin_port= ntohs(80);if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR){return-1; 
    }
     
    char sz[]="GET /question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n\r\n";

      
    int  retval= send(cli_sock,sz,sizeof(sz)-1,0);
    if( SOCKET_ERROR== retval )
    return 0;
     
    char buffer[1024]={0};
    char ShowBuffer[1024]={0};
     
    int nChCount = 0 ;
    while( SOCKET_ERROR!= retval && retval>0   )

    ZeroMemory(buffer,sizeof(buffer));
    retval= recv(cli_sock ,buffer,sizeof(buffer),0); 
    //printf("%s",buffer); 
      
    for(int i =0;i< retval;i++)
    {
    if(buffer[i]>0)
    {
    continue;
    }
    nChCount++;
    ShowBuffer[strlen(ShowBuffer)]=buffer[i];
    if(strlen(ShowBuffer)>=sizeof(ShowBuffer)-10 && nChCount%2==0)
    {
    printf("%s",ShowBuffer); 
    ZeroMemory(ShowBuffer,sizeof(ShowBuffer));
    }

    }
    }
     
    closesocket(cli_sock);
    return 0; 
      

  4.   

    把最佳答案给你标记出来了。
    int _tmain(int argc, _TCHAR* argv[])
    {
    char server_name[256]= "zhidao.baidu.com";
    WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) { 
    WSACleanup();return-1; 
    }  SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);if (cli_sock==INVALID_SOCKET)return-1;// connect to server 
    srv_addr.sin_family= AF_INET; 
    LPHOSTENT lphost= gethostbyname(server_name);
    if (lphost!= NULL) 
    srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr; 
    srv_addr.sin_port= ntohs(80);if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR){return-1; 
    }
     
    char sz[]="GET /question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n\r\n";

      
    int  retval= send(cli_sock,sz,sizeof(sz)-1,0);
    if( SOCKET_ERROR== retval )
    return 0;
     
    char buffer[1024]={0};
    char ShowBuffer[1024]={0};
     
    int nChCount = 0 ;
    while( SOCKET_ERROR!= retval && retval>0   )

    ZeroMemory(buffer,sizeof(buffer));
    retval= recv(cli_sock ,buffer,sizeof(buffer),0); 
    //printf("%s",buffer); 
      
    for(int i =0;i< retval;i++)
    {
    if(buffer[i]>0)
    {
    continue;
    }
    nChCount++;
    ShowBuffer[strlen(ShowBuffer)]=buffer[i];
    if(strlen(ShowBuffer)>=sizeof(ShowBuffer)-10 && nChCount%2==0)
    {

    char * szBest = strstr(ShowBuffer,"最佳答案");
    if( szBest)
    {
    char* szContent = szBest+8;
    *szBest = 0 ;
    printf("%s",ShowBuffer);
    printf("%s","\n\n******************以下是最佳答案*********************\n\n");
    printf("%s",szContent);
    }else
    {
    printf("%s",ShowBuffer); 
    }
    ZeroMemory(ShowBuffer,sizeof(ShowBuffer));
    }

    }
    }
     
    closesocket(cli_sock);
    return 0; }
      

  5.   

    哎,数据一定是有的,看了你的回复就知道是你自己不知道怎么调试看结果
    其实数据都是有的了
    还得将最佳答案给你打出来才行!#include <iostream>
    #include <string>
    #include <vector>
    #include <winsock2.h> 
    #include <stdio.h>
    #pragma comment(lib, "ws2_32.lib")int main(int argc,char* argv[]) 
    {
    char server_name[256]="zhidao.baidu.com";  WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) 

    WSACleanup();return-1; 
    }  SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);
    if (cli_sock==INVALID_SOCKET)
    return-1;// connect to server 
    srv_addr.sin_family= AF_INET; 
    LPHOSTENT lphost= gethostbyname(server_name);
    if (lphost!= NULL) 
    srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr; 
    srv_addr.sin_port= ntohs(80);
    if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR)
    {
    return-1; 
    }
    //char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
    char sz[]="GET http://zhidao.baidu.com/question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n";
    int retval= send(cli_sock,sz,sizeof(sz),0);
    if( SOCKET_ERROR== retval )
    return 0;
    char buffer[50000+1]={0};
    int nTotal=0;
    while( SOCKET_ERROR!= retval ){ 
    retval= recv(cli_sock ,buffer+nTotal,50000,0);
    if (retval<=0)
    {
    break;
    }
    nTotal+=retval;


    closesocket(cli_sock);
    buffer[nTotal]=0;
    char *pStart = strstr(buffer,"<ca><pre>");
    char *pEnd = strstr(pStart,"</pre></ca>");
    int nLen = pEnd - pStart-9;
    char *pGoodAnswer =new char[nLen+1];
    ZeroMemory(pGoodAnswer,nLen+1);
    pStart+=9;
    memcpy(pGoodAnswer,pStart,nLen);
    printf("%s\n",pGoodAnswer); 
    delete [] pGoodAnswer;
    system("pause");
    return 0; 

      

  6.   

    1、获取页面代码,可以用curl
    2、提取里面的链接可以用正则