Ответ 1
Вам нужно передать метод Tuple в connect()
.
s.connect( ('localhost', 2057) )
Предполагаемый первый (неявный) аргумент равен self
, второй - Tuple.
Попытка настроить некоторый базовый код сокета в Python (ну, Jython, но я не думаю, что это актуально здесь).
import socket
class Foo(object):
def __init__(self):
#some other init code here
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect("localhost", 2057)
s.send("Testing 1,2,3...")
data = s.recv()
s.close()
print data
Он говорит мне:
s.connect("localhost", 2057) File "<string>", line 1, in connect TypeError: connect() takes exactly 2 arguments (3 given)
Я чувствую, что что-то действительно просто смотрит на меня в лицо, но я не могу сказать, что я делаю неправильно.
Вам нужно передать метод Tuple в connect()
.
s.connect( ('localhost', 2057) )
Предполагаемый первый (неявный) аргумент равен self
, второй - Tuple.
Вы передаете три аргумента! s
передается как неявный первый аргумент, а два других аргумента, которые вы указали, являются вторым и третьим аргументами.
Теперь причина состоит в том, что socket.connect()
принимает только один аргумент (два, конечно, если вы считаете неявный аргумент экземпляра): см. документы.
s.connect(("localhost", 2057))
Третий (или первый) аргумент, который вы передаете неявно, self
(s
).
Сокеты берут кортеж, состоящий из (HOST, PORT)
.
Функция socket connect
используется для подключения сокета к удаленному адресу. Для IP-сокетов адрес представляет собой пару (хост, порт)
Итак, вы должны использовать:
s.connect( ("localhost", 2057) )
использование:
s.connect(("localhost", 2057))
В socket.connect принимается только 1 аргумент, то есть адрес, 2, если сам подсчитывается. И формат адреса указан в четвертом абзаце, http://docs.python.org/library/socket.html