如主题中所述,在django应用程序中使用的python中的socket.recv()无法正常工作。当我在IDLE / ipython提示符中执行以下命令时,将从服务器接收所有数据:
import socket
s = socket.socket()
s.connect((host,port))
s.setblocking(0)
s.send("<some commands">)
data = ""
while True:
try:
new=s.recv(256)
if not new: break
data+=new
except:
break
从while循环中断后,数据变量具有所有接收的数据。 现在当我把它放到我的Django应用程序的views.py中时:
s = _sendQuery(host, port)
data = s._receiveAll(s)
def _sendQuery(host, port):
sock = None
try:
sock = socket.socket()
sock.connect((host, port))
sock.setblocking(0)
sock.send("<some commands>")
finally:
return sock
def _receiveAll(sock):
data = ""
while True:
try:
temp = sock.recv(256)
if not temp: break
data+=temp
except Exception, ex:
data+=ex
return data.strip()
现在,当我通过浏览器调用应用程序时,它会返回异常消息:
[Errno 11]资源暂时无法使用
告诉我在第一次调用sock.recv(256)时,它已经遇到异常(与sock.setblocking(0)有关),这就是为什么变量数据的值是异常消息的原因仅
任何人都知道如何解决这个问题?我非常困在这里。 提前谢谢!
答案 0 :(得分:0)
我找到了一个解决方案,我正在分享它以防有人发现它有用。在_receiveAll函数中,我修改了此代码:
if not temp: break
到此:
if len(temp) < 256:
data+=temp
break
我还删除了s.setblocking(0)。
希望这有帮助。