2016-02-03 77 views
0

正如本主題中所述,在Django應用程序中使用的python中的socket.recv()未按預期工作。當我在IDLE執行以下操作的命令/ IPython的提示下,所有數據被從所述服務器接收:Django應用程序中的socket.recv()無法正常工作

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() 

現在,當我打電話通過瀏覽器的應用程序,它會返回異常消息:

[錯誤11]資源暫時不可用

它告訴我,在第一次調用sock.recv(256)時,它已經遇到一個異常(與sock.setblocking(0)有關),這就是爲什麼可變數據是個例外僅限年齡。

任何人有一個想法如何解決這個問題?我很困難。 在此先感謝!

回答

0

我找到了一個解決方案,我分享它,以防有人會發現它有用。在_receiveAll功能,我修改從該驗證碼

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

我還除去s.setblocking(0):

if not temp: break 

此。

希望這會有所幫助。

相關問題