当我在python中导入socket时,为什么它会跳过socket.bind?

时间:2014-01-20 23:25:38

标签: python sockets

我认为除了bind之外的每个方法都在那里。我输入:

import socket
socket.bind

在python命令提示符下,得到“AttributeError:'module'对象没有属性'bind'”。

如果我这样做:

from socket import bind

我得到“ImportError:无法导入名称绑定”

否则,dir(socket)返回297,其他一切似乎都正常。就像我有socket.socket,socket.setsockopt等。只是绑定不存在。

我在Mint 16运行python 2.7.5+。在python 3.3.2+中也是如此,在同一台机器上的ubuntu 12.04 vm上的Python 2.7.3中也是如此。

知道发生了什么事吗?

3 个答案:

答案 0 :(得分:5)

bindsocket 对象的方法,而不是模块

以下是创建bind对象后使用socket的示例:

取自socket

上的文档
# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.sendall(data)
conn.close()

答案 1 :(得分:0)

我可能在这里错了,因为我不像你可能那样经常使用socket模块,但似乎bind是模块中类socket的功能socket。所以要访问它,你必须这样做:

>>> socket.socket.bind
<unbound method _socketobject.bind>

答案 2 :(得分:0)

bindsocket.socket的方法,而不是模块中的函数。

s = socket.socket(...)
s.bind()

因此,只有在创建套接字后,才能将其绑定到地址。

参考:Python docs

希望这有帮助!