2016-03-02 71 views
0

我使用Python 2.7写了这个代码:蟒蛇“类型错误:参数必须是字符串或只读字符缓冲区,而不是元组”

class LoadBalancerHandler: 

    def __init__(self, file_name): 
     self.server_socket = socket.socket(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
     file = open(file_name) 
     setup_apps(file.read()) 

    def listen(self, host='localhost', port=80): 
     self.server_socket.bind((host,port)) 
     self.server_socket.listen(5) 
     while True: 
      (client_socket, address) = self.server_socket.accept() 
      threadHandling = ThreadHandling(client_socket, self) 
      threadHandling.start() 

,但我得到这个错误:

TypeError: argument must be string or read-only character buffer, not tuple

这错误是由行提出:self.server_socket.bind((host,port))

+1

您对socket.socket(...)的选项看起来很可疑。请参阅https://docs.python.org/2/library/socket.html。你可能意味着socket.socket(socket.AF_INET,socket.SOCK_STREAM)??? – Stanton

+0

你用什么参数来调用'listen'?添加'print(repr(host),repr(port))'看看你得到了什么。 – tdelaney

+0

例如,假设你调用'someobject.listen(('localhost',80))'',就是说你传递了一个元组作为'host',你可能会得到这样的错误。 – tdelaney

回答

1

同样,我认为你的选项socket.socket(...)是不正确的。如果您尝试创建TCP侦听器,则可以运行

import socket 
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
s.bind(('localhost',5555)) 
s.listen(5) 
+0

请注意,对于低端口范围(<1024?),您可能会获得许可否认这些是受保护的港口。 – Stanton

+0

它工作! 谢谢 – mohammad

相关问题