Django应用程序中的socket.recv()无法正常工作

时间:2016-02-03 18:59:32

标签: python django sockets

如主题中所述,在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)有关),这就是为什么变量数据的值是异常消息的原因仅

任何人都知道如何解决这个问题?我非常困在这里。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,我正在分享它以防有人发现它有用。在_receiveAll函数中,我修改了此代码:

if not temp: break

到此:

if len(temp) < 256:
    data+=temp
    break

我还删除了s.setblocking(0)。

希望这有帮助。