部分代码:
#平台限制,只能用 Python2.x 实现
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('0.0.0.0',80)
sock.listen(1)
下面是 recv 应该收到的完整数据(HTTP 请求):
POST /data/fetchdata HTTP/1.1
Host: www.demo.com
Accept: application/json
Accept-Encoding: gzip, deflate
Content-Length: 8
Cookie: debug=1
Connection: closed
result=1
一开始为了接收数据写的的代码:
buf=''
While True:
buf = buf + client.recv(1024)
if not buf or len(buf)==0:
break #结果是从来不 break
再试
buf = client.recv(4096)
这个只能收到一部分数据(HTTP response body 收不到)。这里有个问题,无论把 buffer 调整多大,第一次 recv 的返回值总是 HTTP response header 部分的数据,很奇怪
后来试了
buf = client.recv(1024) #成功接收 HTTP response header
print "123"
buf = client.recv(1024) #应该接收 HTTP response body,但是一直 blocking
print "456"
这样的,发现 456 根本不输出。
快速 Google 之后也没发现什么适合的解决方法,唯一一个靠谱点的是用 try except 配合自定义 timeout 来检测是否 blocking,缺点就是在网络环境比较恶劣的情况下(比如我现在的)也会丢数据。
向大家求教,谢谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.