首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

向网站发送 HTTP 请求,select回到1,recv没有数据可接收。请强人解决

2013-08-09 
向网站发送 HTTP 请求,select返回1,recv没有数据可接收。请强人解决#include stdafx.hstruct timeval tv

向网站发送 HTTP 请求,select返回1,recv没有数据可接收。请强人解决
#include "stdafx.h"
struct timeval tv;

int _tmain(int argc, _TCHAR* argv[])
{

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


WSADATA wsaData;//WSADATA结构体中主要包含了系统所支持的Winsock版本信息
SOCKET sockfd;//套接口的描述字
struct sockaddr_in server_addr;//通用地址结构
char hostname[]="www.baidu.com";
struct hostent *hostentIP = NULL;
    if ( WSAStartup( MAKEWORD( 1,1  ), &wsaData ) != 0 ) //初始化Winsock 1.1 
      {
          printf("初始化WSAStartup:出错\n");
         WSACleanup( );
      }
////////
///////套接字初始化必须成功地调用WSAStartup()
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
 ///////////
////////////DNS解析协议

if ( (hostentIP=gethostbyname(hostname)) == NULL)
{
printf("DNS解析地址:出错");
}

printf("连接该服务PI:%s\n",inet_ntoa(*((struct in_addr *)hostentIP->h_addr)));


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

if((sockfd=socket(PF_INET,SOCK_STREAM,0))==-1)
{
         printf("创建网络连接失败:出错\n");
         WSACleanup( );
}
void ConnectWeb(void);////建立Web的连接
///////////////////////////////////////////////
/////////通用地址结构
{
memset(&server_addr,0, sizeof(server_addr));
       server_addr.sin_family = AF_INET;
       server_addr.sin_port = htons(80);
       server_addr.sin_addr =*((struct in_addr *)hostentIP->h_addr);
printf("连接该服务端口号:%d\n",htons(server_addr.sin_port));

printf("连接该服务IP:%s\n",inet_ntoa(server_addr.sin_addr));
////////////////////////////////////////////////
        if(connect(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == NULL)
        {

        printf("连接到服务器成功\n");


    }

}
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
///////////
///////////向网站发送 HTTP 请求
char htpp[128]="GET /index.php HTTP/1.1/r/nHost: www.baidu.com/r/nConnection: Close/r/n/r/n/";
    char ttlk[4096];
    fd_set set;
    u_long iMode = 0; 
    int i,io=1;


    ioctlsocket(sockfd,FIONBIO,&iMode);
    i=send( sockfd, htpp, strlen(htpp), 0);
if(i != SOCKET_ERROR)
{
      printf("发送成功%s\n发送了%d个字\n",htpp,i);
}
//memset(ttlk, 0, sizeof(ttlk)); 
//recv(sockfd,ttlk,sizeof(ttlk),0);
//printf("1111;%u", ttlk);
while(io){
FD_ZERO(&set);
FD_SET(sockfd,&set); 
    tv.tv_sec = 1;
tv.tv_usec = 1;


     i=select(sockfd+1,&set,0,0, &tv);

 
printf("返回假(0)。;%d%\n",FD_ISSET(sockfd,&set));
    
if(i==0) 
{
        printf("连接超时\n");
}
if(i>0)
{
memset(ttlk, 0, sizeof(ttlk));
recv(sockfd,ttlk,4095,0);////////////////////////////////////这里没有数据可接收
/////////////////////////////////////////////////////////////////
io=0;
}
}

         WSACleanup( );
return 0;
}
select
[解决办法]

引用:
while(io){
FD_ZERO(&set);
FD_SET(sockfd,&set); 
    tv.tv_sec = 1;
tv.tv_usec = 1;


     i=select(sockfd+1,&set,0,0, &tv);

 
printf("返回假(0)。;%d%\n",FD_ISSET(sockfd,&set));
    
if(i==0) 
{
        printf("连接超时\n");


}
if(i>0)
{
memset(ttlk, 0, sizeof(ttlk));
recv(sockfd,ttlk,4095,0);////////////////////////////////////这里没有数据可接收
/////////////////////////////////////////////////////////////////
io=0;
}
}



重点就是这里了。编译后
向网站发送 HTTP 请求,select回到1,recv没有数据可接收。请强人解决




你确定的发出去的协议是和网站能接收的协议么?
如果不能它们的协议的话,它不会理睬你的!

这个问题用抓包工具把,抓包看看最明显是什么问题啦!

热点排行