免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 古兮之
打印 上一主题 下一主题

[C] linux下socket编程 接收post数据问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-05-23 16:57 |只看该作者
如果是自己编写客户端的话, 那应该可以在客户端实现的。但这可能不是很好的,可靠性不是很高, ...
古兮之 发表于 2010-05-21 11:49


我的想法就是和你的想法一样,没有想到要自己写客户端,就是接收普通的浏览器提交过来的数据,这得实时分析http协议,找到文件边界,然后将提交过来的文件数据先写到一个临时文件中,随后提供一个api来获取该临时文件的大小。

论坛徽章:
0
12 [报告]
发表于 2010-05-23 17:00 |只看该作者
用c语言写了个http服务器,在用recv函数接受浏览器传递过来的post数据时,发现recv会停止在消息头与空行处( ...
古兮之 发表于 2010-05-20 12:38



    你贴一下代码看看

论坛徽章:
0
13 [报告]
发表于 2010-05-28 10:49 |只看该作者
sizeof(recvbuf)是多大?

论坛徽章:
0
14 [报告]
发表于 2010-05-28 16:38 |只看该作者
sizeof(recvbuf)是多大?
wenjianhn 发表于 2010-05-28 10:49



    我的recvbuf设的1024字节

论坛徽章:
0
15 [报告]
发表于 2010-05-28 17:03 |只看该作者
第一要反复读

第二 http head 后面跟一个\r\n\r\n 是结束符。以后就是数据了, 读取的长度 就是 length 字段的长度。但是内容可能用了html编码。  

最后 看不懂你写的代码。。。

论坛徽章:
0
16 [报告]
发表于 2010-05-28 17:19 |只看该作者
第一要反复读

第二 http head 后面跟一个\r\n\r\n 是结束符。以后就是数据了, 读取的长度 就是 length  ...
benjiam 发表于 2010-05-28 17:03



    你只要看第一行就是了。一个recv函数。 我的程序就是停止在接受数据的空行处。老师跟我讲url head头 和数据是一起发送过来的,那我接受也应该是一次全部接收下来的啊。

论坛徽章:
0
17 [报告]
发表于 2010-05-28 18:23 |只看该作者
http是TCP链接吧,你的recv这样用,如果数据不够sizeof(recvbuf),应该是会阻塞的,除非浏览器自动关闭链接(俺对http协议不熟悉,大概记得链接是有服务器来关闭的)。
解决办法,可以使用MSG_DONTWAIT标志。或者先用ioctl获取可以读的字节数。

论坛徽章:
0
18 [报告]
发表于 2010-05-28 23:07 |只看该作者
你只要看第一行就是了。一个recv函数。 我的程序就是停止在接受数据的空行处。老师跟我讲url hea ...
古兮之 发表于 2010-05-28 17:19


如果你一次也返回不了 那么检查你前面的流程代码吧, 目前我看到的是已经获得到数据了。

客户端是一次送过来的 不意味着你一次recv 就可以获取(虽然基本上一次都能获取到)。

论坛徽章:
0
19 [报告]
发表于 2010-05-29 12:19 |只看该作者
http是TCP链接吧,你的recv这样用,如果数据不够sizeof(recvbuf),应该是会阻塞的,除非浏览器自动关闭链接 ...
xiexiecn 发表于 2010-05-28 18:23



    能具体点吗?你的意思是说我的recvbuf大小要和接收的数据大小一样大?

论坛徽章:
0
20 [报告]
发表于 2010-05-29 18:16 |只看该作者
恩,或者比它小。因为TCP是面向链接的,和UDP不一样,既然你指定了recv希望接受的字节数,那么只要数据不够并且链接没有关闭,那么recv是会阻塞的。这个和读文件有些不一样,因为文件有个文件尾,当超过了read自然就返回了,socket需要等待对方关闭才行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP