Python认为我传递的争论比我多?

时间:2011-08-11 07:30:48

标签: python sockets jython

尝试在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)

我觉得一些非常简单的感觉就是盯着我看,但我不知道我做错了什么。

6 个答案:

答案 0 :(得分:12)

您必须将元组传递给connect()方法。

s.connect( ('localhost', 2057) )

预期的第一个(隐含)参数是self,第二个是元组。

答案 1 :(得分:9)

传递三个参数! s作为隐含的第一个参数传递,而您指定的其他两个参数是第二个和第三个参数。

现在,令人不安的原因是因为socket.connect()只接受一个参数(当然,如果计算隐式实例参数,则为两个):see the docs

答案 2 :(得分:4)

s.connect(("localhost", 2057))

您隐式传递的第三个(或第一个)参数是selfs)。

Sockets取一个由(HOST, PORT)组成的元组。

答案 3 :(得分:4)

套接字connect函数用于将套接字连接到远程地址。对于IP套接字,地址是一对(主机,端口)

所以你应该使用:

s.connect( ("localhost", 2057) )

答案 4 :(得分:3)

使用:

s.connect(("localhost", 2057))

答案 5 :(得分:0)

socket.connect只接受1个参数,即地址,如果自己计数,则接受2。 地址格式在第四段http://docs.python.org/library/socket.html

中说明