SOCKET 连接 www.163.com 80,每次连接都成功了,而且最后也send成功,就是
接收不到东西啊??得到163主页的内容都是空的。我是ADSL拨号上网的,SOCKET直接连接方式,每次启动程序防火墙都提示是否放行。
放行的ip是我的dns.
    SOCKET sClient; 
  sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
AfxMessageBox("Create Socket Error");
return;
}
                  char buffer[1024] ={0};
char bufferlen = 1024;
server.sin_family=AF_INET;
server.sin_port=htons(m_DestPort);
DWORD ip;
//in_addr goal=GetIpByHost((char*)(LPCTSTR)m_DestAddr);
int len; 
unsigned long addr = inet_addr( (char*)(LPCTSTR)m_DestAddr);
in_addr hst = GetIpByHost( (char*)(LPCTSTR)m_DestAddr);
server.sin_addr.s_addr = hst.S_un.S_addr;
if(connect(sClient,(sockaddr *)&server,sizeof(server))==SOCKET_ERROR)
{
AfxMessageBox("connect error");
return;
}
sprintf(buffer,"GET / HTTP/1.0\nHost:%s\n\n",m_DestAddr);
int ret=send(sClient,buffer,strlen(buffer),0);
if(ret==SOCKET_ERROR)
{
ShowLastError("send()");
closesocket(sClient);
return;
}
while(1)
{
AfxMessageBox("OK2");
ret=recv(sClient,buffer,bufferlen,0);
if(ret==SOCKET_ERROR)
{
 break;
}
if(ret==0)
     break; 
                    buffer[ret]='\n';
m_GetHTTP.ReplaceSel(buffer,FALSE);
}
         closesocket(sClient);
AfxMessageBox("成功");
return ;

解决方案 »

  1.   

    难道要dns设置代理?
    谁来看看啊?很简单的,
      

  2.   

    我ping www.163.com 结果是 220.181.30.15 
    难道GetIpByHost得到是DNS的IP???
      

  3.   

    我也有这个问题,如果没接入公网,会收到电信服务器的消息要求重新定位到其上网服务器,如果已接入就不行了,而且就算连我本机的IIS也不行。
      

  4.   

    TRACE输出一下,看GetIpByHost获得的是什么
      

  5.   

    GetIpByHost地的确确已经获取了163.com的ip我后来调试过了,
    改变了Send中的内容也一样反馈不回来。我用sniffer跟踪ie发送的数据包,然后把自己发送的数据包也一样发给www.163.com,
    就是取不到东西阿。 怎么ie就可以呢??奇怪。
      

  6.   

    char bufferlen = 1024;
    改为
    int bufferlen = 1024;因为用char只截取8个字节,即0x400后的0
    导致ret=recv(sClient,buffer,bufferlen,0);
    传入的bufferlen为0,自然得不到数据了
      

  7.   

    请到
    http://community.csdn.net/Expert/TopicView1.asp?id=3889162
    领分