免费注册 查看新帖 |

Chinaunix

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

[函数] socket 函数中recv函数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-01 11:35 |只看该作者 |倒序浏览
linux下编制网络聊天程序,遇到这样一个问题,当client和server建立好连接后,第一次互相通话可以成功,即客户端先给服务器端发送数据,服务器端可以收到,然后服务器端给客户端发送数据也可以收到,再之后就有问题了,如果客户端不发送数据服务器端一样可以通过recv()函数接收到数据,接收到的为空,即打印出来为空格,俺道理说recv函数为阻塞函数,只有收到数据才会通过啊,可是为什么会出现上述情况呢?我在同一台机器上做的,开两个终端,一个为服务器,一个为客户!
难道和缓冲区有什么联系吗???
请各位分析一下!!!
谢谢!
bluesprit980203 该用户已被删除
2 [报告]
发表于 2005-09-01 11:41 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2005-09-01 12:00 |只看该作者

socket 函数中recv函数的问题

如果你使用的是阻塞方式,那么recv返回要不是出错(也许连接断了),要不就是真有数据了。并且空和空格是两回事。

我估计你的情况是recv返回0,客户端断开连接了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-09-01 12:07 |只看该作者

socket 函数中recv函数的问题

ret=recv(...);
if(ret<0)
continue;
else if(ret==0)
close(fd);
else
....

论坛徽章:
0
5 [报告]
发表于 2005-09-01 13:07 |只看该作者

socket 函数中recv函数的问题

如果程序写得没有问题的话,理论上不可能出现上述问题,除非外星人攻打地球

论坛徽章:
0
6 [报告]
发表于 2005-09-01 16:06 |只看该作者

socket 函数中recv函数的问题

毛病找到了,谢谢楼上各位的提示。从recv函数的返回值中找到了答案。
原因是缓冲区大小的问题,我设置的缓冲区大小是100char,而发送时发送的1024因此服务器方一直在接收,直到接收完全部1024字节,因此客户端即使没有发送服务器端也在不停的显示空的字符,造成了上述现象。
    现在,我的客户端程序需要同时处理输入数据和从服务器方接收数据的问题,我的思想是利用alarm信号,每2秒钟执行一次接收任务,在alarm对应的处理函数中,调用select()函数等待2秒,看看是否有数据穿过来,如果有则显示,没有则返回,再过两秒再执行上述任务。此想法可行性如何?一会要去“保鲜”了!没时间写了,晚上吧!请各位弟兄给意见啊!
   谢谢!!!

论坛徽章:
0
7 [报告]
发表于 2005-09-01 16:11 |只看该作者

socket 函数中recv函数的问题

不会吧,我晕面

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

socket 函数中recv函数的问题

楼主你敢把代码贴出来吗?

论坛徽章:
0
9 [报告]
发表于 2005-09-01 16:40 |只看该作者

socket 函数中recv函数的问题

刚开始写代码有这样的问题也很正常的!:)

论坛徽章:
0
10 [报告]
发表于 2005-09-01 17:42 |只看该作者

socket 函数中recv函数的问题

看了各位的反应,是不是我说的同时处理数据输入和接受数据有问题啊?刚刚开始学习socket编程,请各位多指教啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP