0

我正在尝试制作一个多线程的网络代理。我可以做一个单线程的,但是当我尝试使用多线程时,它每次都会抛出这个错误。

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很陌生,不知道为什么会出现这个错误。我查看了有关此错误的其他一些帖子,答案似乎与程序员使用多个文件和导入有关,我只使用一个文件。谢谢你。

4

1 回答 1

1

该错误是由于在启动新线程时传递参数时出现了一个不幸的拼写错误。不幸的是,它与套接字库中的名称匹配,因此生成的错误更难调试。

可以通过尝试调用来重现错误消息:

 import socket
 socket.socket.recv(BUFFLEN)

这就是那个错字所产生的。值得庆幸的是,通过更改此行很容易修复:

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

改为阅读

thread.start_new_thread(newClientInteraction, (newsocket, addr))
于 2017-01-24T23:17:24.280 回答