在Perl中,我可以做到
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
bind(SERVER, $my_addr);
listen(SERVER, SOMAXCONN);
$client_address = accept(CLIENT, SERVER);
$line = <CLIENT>; # Read until newline or EOF
print $line
通过浏览器$line = <CLIENT>
访问它时将返回并打印而不会阻止。如果我在跟随
from socket import *
host = ""
port = 9000
address = (host, port)
server = socket(AF_INET, SOCK_STREAM)
server.bind(address)
server.listen(SOMAXCONN)
client, addr = server.accept()
client_fd = client.makefile()
data = client_fd.readlines()
print data
除非我在浏览器中终止请求,否则 client_fd.readlines()
会被阻止。有办法解决这个问题吗?为什么perl中的<CLIENT>
没有阻塞?
答案 0 :(得分:1)
您的(更新的)Perl示例是从客户端读取一个行; Python正在从客户端读取所有输入行,直到套接字关闭。并且客户端不会关闭套接字,因为它希望能够执行HTTP keepalive。您应该使用readline
而不是readlines
来读取单行输入。或者,如果你真的想说HTTP,你应该使用为此制作的模块。