向网站发送 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
[解决办法]