Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的web服务器有时只传输部分响应?_Python_Linux_Network Programming_Webserver - Fatal编程技术网

Python 为什么我的web服务器有时只传输部分响应?

Python 为什么我的web服务器有时只传输部分响应?,python,linux,network-programming,webserver,Python,Linux,Network Programming,Webserver,我有一段定制的web服务器代码。它是用 当从远程客户端请求时,它似乎缩短了消息的长度。但当我在同一台机器上使用它时,它似乎传递了完整的信息。我不知道问题是什么,也不知道如何诊断。我使用web浏览器、curl和nc对其进行了测试。当从远程客户端请求时,它从未传递完整长度的消息 我的Web服务器的简化版本仍然存在这个问题。我在Ubuntu11.04上使用Python 2.7.1执行此操作,调用send()发送大量数据后,您将立即关闭套接字。如果仍有数据被缓冲,那么当您关闭套接字时,数据将被丢弃 相反

我有一段定制的web服务器代码。它是用

当从远程客户端请求时,它似乎缩短了消息的长度。但当我在同一台机器上使用它时,它似乎传递了完整的信息。我不知道问题是什么,也不知道如何诊断。我使用web浏览器、
curl
nc
对其进行了测试。当从远程客户端请求时,它从未传递完整长度的消息


我的Web服务器的简化版本仍然存在这个问题。我在Ubuntu11.04上使用Python 2.7.1执行此操作,调用
send()
发送大量数据后,您将立即关闭套接字。如果仍有数据被缓冲,那么当您关闭套接字时,数据将被丢弃


相反,您应该调用套接字来告诉远程端您已完成发送。这称为TCP“半关闭”。作为响应,另一端将关闭其一侧,您将收到套接字不再可读的通知。然后,也只有在那时,您才应该关闭套接字句柄。

OOPS!我更正了我的问题,它实际上是我的Web服务器的代码。我没有任何自定义客户端。我没有看到任何在线evnet文档,但如果它只是底层套接字上的一层,这可能就是它没有发送全部内容的原因。您需要测试
send
的结果,看看它发送了多少,然后继续发送剩余的。而在接口
127.0.0.1
上,它可能会发送整个内容。@Greg@wberry
send()
不是来自套接字,而是一个自定义函数,它反过来调用evnet模块的方法。看起来它确实会检查以确保在关闭之前发送所有数据,但我不确定。