免费注册 查看新帖 |

Chinaunix

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

strstr匹配不到tcp连接后的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-02 22:44 |只看该作者 |倒序浏览
统计某站点的在线流量信息,telnet 60.2.251.8 后,会显示出该站的"上线人数XXXXX",我想取出这个XXXXX,以供某一程序使用


我写了一个:思路是连接后,strstr匹配"["字串,如图也确实有一个"[",可程序找不到,why??


  1. /********头文件**********/
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <sys/uio.h>
  6. #include <unistd.h>
  7. #include <strings.h>
  8. #include <netinet/in.h>

  9. /********宏定义***********/
  10. #define MAXLINE 4096


  11. int
  12. main(int argc,  char **argv)
  13. {
  14.     int                 sockfd, n;
  15.     char                recvline[1+MAXLINE];
  16.     struct sockaddr_in  servaddr;

  17.     void    usage(void);

  18.     if(2!=argc){
  19.         usage();
  20.         exit(-1);
  21.     }

  22.     if(0>(sockfd=socket(AF_INET,SOCK_STREAM,0))){
  23.         fprintf(stderr,"Socket Error");
  24.         abort();
  25.     }

  26.     bzero(&servaddr,sizeof(servaddr));
  27.     servaddr.sin_family=AF_INET;
  28.     servaddr.sin_port=htons(23); /*telnet*/
  29.     if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0){
  30.         fprintf(stderr,"inet_pton function error for %s",argv[1]);
  31.         abort();
  32.     }

  33.     if(connect(sockfd,(struct socket_addr *)&servaddr,sizeof(servaddr))<0){
  34.         fprintf(stderr,"connect function error");
  35.         abort();
  36.     }
  37.     bzero(&servaddr,sizeof(servaddr));
  38.     servaddr.sin_family=AF_INET;
  39.     servaddr.sin_port=htons(23); /*telnet*/
  40.     if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0){
  41.         fprintf(stderr,"inet_pton function error for %s",argv[1]);
  42.         abort();
  43.     }

  44.     if(connect(sockfd,(struct socket_addr *)&servaddr,sizeof(servaddr))<0){
  45.         fprintf(stderr,"connect function error");
  46.         abort();
  47.     }

  48.     n=read(sockfd,recvline,MAXLINE);
  49.     recvline[n]=0; /*null terminate */
  50.     char * locate=NULL;
  51.     if( (locate=strstr(recvline,"[")) != NULL ){
  52.         int num=0,r=1;
  53.         fprintf(stdout,"%s==>%d\n",locate,num);
  54.         for(--locate; *locate>='0' && *locate <='9'; --locate){
  55.             num += *locate*r;
  56.             r*=10;
  57.         }
  58.         fprintf(stdout,"%s==>%d",locate,num);
  59.         exit(num);
  60.     }
  61.     exit(0);
  62. }
复制代码


  1. #./test 60.2.251.8
  2. 无输出信息
复制代码


论坛徽章:
0
2 [报告]
发表于 2006-10-22 00:19 |只看该作者
read不缓存的IO函数,如果数据较大,需要使用read循环读取,建议使用fread等缓存的IO。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP