2016-03-02 84 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

相關問題