免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5239 | 回复: 2
打印 上一主题 下一主题

socket发送http请求读取返回值的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-08 13:59 |只看该作者 |倒序浏览
哪位大侠帮帮忙。我写的一个向httpserver发送请求的程序,为啥读到的返回字节(rn)为2920?是字符数组的长度限制吗??
源程序如下:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>   
#include <netdb.h>     
#include <stdio.h>
#include "stderr.h"
#include <string.h>
#define HTTP_REQ "GET /CSStarPlus/tabid/115/ctl/Login/Default.aspx?returnurl=%2fcsstarplus%2fdefault.aspx\r\n \r\n "
int main (int argc,char *argv[])
{
if(argc!=2)
{
printf("argument err!\n");
exit(1);
}
int s,c,listensd,connectsd;
struct sockaddr_in httpserver;
struct sockaddr_in client;
listensd = socket(AF_INET,SOCK_STREAM,0);

httpserver.sin_family = AF_INET;  
httpserver.sin_port = htons(80);
httpserver.sin_addr.s_addr=inet_addr(argv[1]);
if(c=connect(listensd,(struct sockaddr *)&httpserver,sizeof(httpserver))<0)
{   
   perror("connect");   
   exit(1);
}
int send_len,len;
char read_buf[20000];
char buf[]=HTTP_REQ;

send_len=write(listensd,buf,sizeof(buf));
if(send_len<0)
{
printf("write err\n");
exit(1);
}
printf("write ok\n");

int rn;

rn=recv(listensd,read_buf,20000,0);
if(rn   <=   0)                 
  {   
  printf("Can't   recieve   file!(http)\n");   
  exit(1);   
  }
else
{

write(STDOUT_FILENO,read_buf,rn);
printf("%d",rn);
exit(0);
}
close(listensd);   
  return   0;   
}

论坛徽章:
0
2 [报告]
发表于 2008-10-08 14:00 |只看该作者
忘了说了,用telnet发送,返回的字符是10000多。

论坛徽章:
0
3 [报告]
发表于 2008-10-08 14:40 |只看该作者
循环recv

你最好看一下recv的说明和使用方式

recv返回的是当前接收到的数据,在接收到你想要的数据之前你需要循环地读取,或者直到连接关闭,此时recv返回0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP