读书人

用C++获取web服务器上的文件错出~请指

发布时间: 2012-03-06 20:47:55 作者: rapoo

用C++获取web服务器上的文件错出~请指点
C++ 连接web服务器,并获取相应的页面,输出结果是:
send lentgh 14
recv error
recv len:-1
recv buf is
请问问题出在哪里?为什么收不到包呢?

#define SERVER_IP "219.133.38.147 " // 测试服务器 ip地址
#define SERVER_PORT 80//测试端口

static int sock_init()
{
struct sockaddr_in stSockAddr_In;
int iSock = 0;
struct timeval tv;
int iRetCode = 0;


//创建Socket
iSock=socket(AF_INET,SOCK_STREAM,0);
if(iSock < 0)
{
return -1;
}
//设置该连接的超时时间
tv.tv_sec=3;
tv.tv_usec=0;
setsockopt(iSock,SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv));
setsockopt(iSock,SOL_SOCKET,SO_SNDTIMEO,&tv,sizeof(tv));

memset(&stSockAddr_In, 0, sizeof(struct sockaddr_in));
stSockAddr_In.sin_family=AF_INET;
stSockAddr_In.sin_port=htons(SERVER_PORT);
stSockAddr_In.sin_addr.s_addr=inet_addr(SERVER_IP);

//连接服务器
iRetCode = connect(iSock, (struct sockaddr *)&stSockAddr_In,sizeof(stSockAddr_In));
if(iRetCode < 0)
{
close(iSock);
return -1;
}

return iSock;

}
static void sock_close( int sockfd)
{
if(sockfd > 0)
{
close(sockfd);
}
}


int main()
{
int ret = 0;
int iSock = 0;
int iSendLen = 0;
int iRecvLen = 0;
static char szBuf[65535];
char req[1024];

iSock = sock_init();
if(iSock < 0)
{
printf( "connect fail ");
return -1;
}

/* 这里填充协议字段,按照协议文文本的字段,填充此字符串即可 */
snprintf(szBuf,sizeof(szBuf), "GET /cgi-bin/payacct.cgi HTTP/1.0 ");

/* 各字段的含义详细见《协议.txt》 ,填好发包即可*/

iSendLen=strlen(szBuf);
printf( "send lentgh %d\n ",iSendLen);
ret = send(iSock,szBuf,iSendLen,0);
if(ret < iSendLen)
{
printf( "sending error\n ");
}
memset(szBuf, 0, sizeof(szBuf));
ret = recv(iSock,szBuf,sizeof(szBuf),0);
if(ret <= 0)
{
printf( "recv error\n ");
printf( "recv len:%d\n ",ret);
printf( "recv buf is %s \n ",szBuf);
printf( "\n ");
return -1;
}
/* 收到包的内容填充在 buffer 中,解析出来即可 */
printf( "recv len:%d\n ",ret);
printf( "recv buf is %sThis place change line \n ",szBuf);
printf( "\n ");

sock_close(iSock);
return 0;

}

[解决办法]
snprintf(szBuf,sizeof(szBuf), "GET /cgi-bin/payacct.cgi HTTP/1.0 ");
改成
snprintf(szBuf,sizeof(szBuf), "GET /cgi-bin/payacct.cgi HTTP/1.0\r\n\r\n ");

读书人网 >C++

热点推荐