2014-03-13 41 views
0

我想嘗試一些,它不工作。我想讓客戶端套接字線程,然後隨時發送一些消息,當我打電話。我想通過命令client.sock.sendall(data)來做到這一點,但它不起作用。爲什麼?首先,我打電話給我的客戶端實例,然後套接字,然後命令發送數據。我的客戶端線程應該生活,所以我可以隨時給他打電話..對不對?發送通過套接字蟒蛇,線程

這裏是我的客戶端代碼:

import threading 
import socket 
import pickle 

def main(): 

     class Chat_Client(threading.Thread): 
      def __init__(self): 
       threading.Thread.__init__(self) 
       self.host = '127.0.0.1' 
       self.sock = None 
       self.running = 1 
      def run(self): 
       PORT = 1234 
       self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
       self.sock.connect((self.host, PORT)) 

      def kill(self): 
       self.running = 0 

     client=Chat_Client() 
     client.start() 

     pole=['majo','jojo', 'surovec'] 
     data = pickle.dumps(pole) 
     client.sock.sendall(data) 

     client.kill() 

if __name__ == "__main__": 
     main() 

這裏是錯誤消息:

client.sock.sendall(data) 
    AttributeError: 'NoneType' object has no attribute 'sendall' 

是否某種方式存在,如何做的?我beginer,我試圖學習蟒蛇..

問候

約瑟夫

回答

1

試着這麼做

while client.sock is None: 
    time.sleep(0.0001) 

client.sock.sendall(data) 

你會更好使用Queue雖然。

+0

謝謝,它的工作。但它打印錯誤:client.sock.sendall(data) OSError:[WinError 10057]。但數據被髮送,並且也被接收。所以我可能會嘗試隊列 – Joffo