免费注册 查看新帖 |

Chinaunix

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

我用socket编程read的时候出的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-04 19:44 |只看该作者 |倒序浏览
我想读出所有的信息,可是一直失去相应
  1. void snr(int sockfd,char *cmd,char buf[])
  2. {
  3.         int len;
  4.         int tmp;
  5.         char *p;
  6.         char b[1024];
  7.         p=buf;
  8.         len=strlen(cmd);
  9.         send(sockfd,cmd,len,0);
  10.         len=0;
  11.         while(tmp=recv(sockfd,b,1,0))
  12.         //while()
  13.         //tmp=recv(sockfd,b,1024,0);
  14.         {
  15.                 printf("%d",tmp);
  16.                 puts(b);
  17.                 len+=tmp;
  18.                 strcpy(p,b);
  19.                 p=&buf[len];
  20.         }
  21.         buf[len]='\0';
  22. }
复制代码

我一个字符一个字符的读,到没有信息的时候recv就没有响应了,而根本就不会给tmp赋值,而且b即不是NULL,也不是EOF,我怎么才能把所有的信息全部读出来呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-08-04 21:01 |只看该作者

我用socket编程read的时候出的问题

老大,你需要知道长度或者有个措施知道什么时候结束,因为tcp是没有边界的有序字符流。

你这样的话,除非对方close了描述字,或者socket发生了错误,或者被信号中断,或者对方进程异常等。才能让recv返回。

在这个过程中,你可以设置超时,或者干脆用select。

论坛徽章:
0
3 [报告]
发表于 2003-08-04 21:06 |只看该作者

我用socket编程read的时候出的问题

我开始是用php编写的,遇到的情况和这个一样,但为什么好多书上的例子都是while(!feof(..))就可以了呢?
比如我用php获取一个ftp所有文件信息
  1. $fp=fopen($this->;server.".".$this->;port,'a');
  2. $i=0;
  3. while (!feof($sock_data)) {
  4.         $list[$i++] = ereg_replace("[\r\n]", "", fgets($sock_data, 512));
  5.         if($i==100){
  6.                 fputs($fp,implode("\n", $list));
  7.                 $i=0;
  8.         }
  9. }
  10. fclose($fp);
复制代码

这个程序执行就没有问题

论坛徽章:
0
4 [报告]
发表于 2003-08-04 21:34 |只看该作者

我用socket编程read的时候出的问题

谢谢,我用select搞掟了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP