2016-03-02 3 views
0

Я написал этот код, используя Python 2.7:питона 'TypeError: аргумент должен быть строкой или только для чтения буфера символов, а не кортеж'

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