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

用C++获取web服务器上的文件错出~请指点,该如何处理

2012-03-06 
用C++获取web服务器上的文件错出~请指点C++连接web服务器,并获取相应的页面,输出结果是:sendlentgh14recve

用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 ");

热点排行