免费注册 查看新帖 |

Chinaunix

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

服务端的数据怎么会满的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-10 11:00 |只看该作者 |倒序浏览
client:

  1.   while(1){
  2.           for(i = 0;i<3;i++){
  3.                     memcpy(lstr,str[i],strlen(str[i]));
  4.                     printf("lstr==%s\n",lstr);
  5.                     if ((len = send(socket_descriptor,lstr,strlen(lstr),0)) == -1)
  6.                         {
  7.                         perror("Error in send\n");
  8.                         exit(1);
  9.                         }
  10.                    memset(lstr,0,strlen(str[i]));
  11.                     sleep(2);
  12. }
  13.         }
  14.                              
  15. }
复制代码

server:

  1.         for(;;){
  2.                     printf ("Accepting connections....\n");
  3.         if( (temp_sock_descriptor = accept(sock_descriptor,(struct sockaddr *)&pin,&address_size)) == -1)
  4.         {
  5.                 perror("call to accept");
  6.                 exit(1);
  7.         }       
  8.        
  9.         int i = 0;
  10.         for(;;){
  11.                    
  12.                 if ((lens = recv(temp_sock_descriptor,buff,sizeof(buff),0)) == -1){
  13.                         printf("call to recv...\n");
  14.                         break;
  15.                 }
  16.                 a = buff;
  17.                 printf("i==%d\n",i);
  18.                 printf("buff=%sYYYYYY\n",buff);
  19.                 Decode(a,lens);
  20.                 memset(buff,0,strlen(buff));
  21.                 if ((len = send(temp_sock_descriptor,tbuff,sizeof(tbuff),0)) == -1){
  22.                         printf("call to send....\n");
  23.                         break;
  24.                 }
  25.                 i++;
  26.         }
  27.     }
  28. }
复制代码

我发现客户端不停地发送数据的时候,到了一定时间,我的服务端好像从停在recv读数据那一步,然后我一关闭客户端,立即打印出一大串应该早被打印的数据内容(客户端发送来的是不同的数据,本来应该一条一条被解码,可是打印的结果,好像所有的数据同时进入到我设定的buff里面)

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-09-10 12:53 |只看该作者

服务端的数据怎么会满的?

recv 不是这么写的。
换成
while recv

论坛徽章:
0
3 [报告]
发表于 2004-09-10 14:19 |只看该作者

服务端的数据怎么会满的?

什么意思啊,没看明白?
写成while(recv())???
如果while不成功的话,岂不是要退到accept那里了?
if(recv())这个有什么不好??
我希望的效果是,如果客户端不关闭,服务端一直与客户端相连

论坛徽章:
0
4 [报告]
发表于 2004-09-10 14:36 |只看该作者

服务端的数据怎么会满的?

你发送一次,可能接收了n次,
发送了n次,可能接收了一次。

因此”一条一条被解码“需要你程序自己控制。

论坛徽章:
0
5 [报告]
发表于 2004-09-10 15:41 |只看该作者

服务端的数据怎么会满的?

问题是,刚开始可以很好的一条一条被解码,但是过了一段时间,连续几条内容写入到我设置的buff里,这条解码失败后,又恢复正常

论坛徽章:
0
6 [报告]
发表于 2004-09-10 20:52 |只看该作者

服务端的数据怎么会满的?

你的这段代码也有问题吧,memset(lstr,0,strlen(str));改成memset(lstr,0,sizeof lstr);

while(1){
     for(i = 0;i<3;i++){
          memcpy(lstr,str,strlen(str));
          printf("lstr==%s\n",lstr);
                    if ((len = send(socket_descriptor,lstr,strlen(lstr),0)) == -1)
         {
         perror("Error in send\n";
         exit(1);
         }
         memset(lstr,0,strlen(str));
               sleep(2);
}
   }
                              
}

论坛徽章:
0
7 [报告]
发表于 2004-09-10 21:02 |只看该作者

服务端的数据怎么会满的?

打印一些LOG,看看你的程序到底阻塞在哪里?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP