2017-01-24 22 views
0

私はマルチスレッドのウェブプロキシを作ろうとしています。私は単一のスレッドを1つだけうまくやることができますが、マルチスレッドを使用しようとすると毎回このエラーがスローされます。`member_descriptor`オブジェクトはソケットオブジェクトで呼び出せません

Traceback (most recent call last): 
    File "malwareProxy.py", line 25, in newClientInteraction 
    request = clientSocket.recv(BUFFLEN) 
TypeError: 'member_descriptor' object is not callable 

私はこれらの輸入を持っている:

import sys 
import thread 
from socket import * 

とコードの重要なビット:

def newClientInteraction(clientSocket, addr): 
    try: 
     port = 80 

     request = clientSocket.recv(BUFFLEN) 
.... 
serverListener = socket(AF_INET, SOCK_STREAM) 
    serverListener.bind(("", serverPort)) 
    serverListener.listen(100) 
    print("\nProxy Server listening on port {0}...".format(serverPort)) 

    # Start to listen for connections 
    while True: 
     (newsocket, addr) = serverListener.accept() 
     print("Connection made from: {0}".format(newsocket.getpeername())) 

     thread.start_new_thread(newClientInteraction, (socket, addr)) 

助けてください。私はかなりPythonに新しいですし、なぜこのエラーが発生しているのかわかりません。私はこのエラーに関するいくつかの他の投稿を見てきました。答えは複数のファイルとインポートを使用しているプログラマと関係しているようです。私はただ1つのファイルを使用しています。ありがとうございました。

+1

読むために:ありがたいことに、それはこの行を変更することで、修正するのは簡単ですnewsocket、addr)__ 2行上の行。 __thread.start_new_thread__呼び出しで** newsocket **を渡してみてください。 – sal

+0

私は本当に愚かです!ありがとうございました。 –

+1

あなたはそうではありません。それは不幸なスペルミスです。私は答えを加えました。正しい場合はそれを受け入れてください。 :) – sal

答えて

1

このエラーは、新しいスレッドを開始するときにパラメータを渡す際の誤ったタイプミスが原因です。 ソケットライブラリの名前と一致するため、残念なことにが生成されるため、生成されるエラーはデバッグするのが難しくなります。

エラーメッセージが呼び出そうとし再生することができる。

import socket 
socket.socket.recv(BUFFLEN) 

そのタイプミスが生産されたものです。あなたは__を作成していた間、

thread.start_new_thread(newClientInteraction, (socket, addr)) 

は(あなたがスレッドを起動すると、あなたは** **ソケットを渡すように見える代わりに

thread.start_new_thread(newClientInteraction, (newsocket, addr)) 
+0

'member_descriptor'は何ですか?私も同様の問題を抱えていますが、 'cur_time = cur_time + timedelta.seconds(1)' < - 私はソケットとは何の関係もないと思います... –

+0

アップデート: 'cur_time = cur_time + timedelta(秒= 1) 'です。しかし、なぜ私はそこに 'member_descriptor'があるのか​​混乱しています... –

関連する問題