【问题标题】:What's the return value of Socket.accept() in pythonpython中Socket.accept()的返回值是什么
【发布时间】:2012-09-09 09:34:10
【问题描述】:

我用python中的socket模块做了一个简单的服务器和一个简单的客户端。

服务器:

# server.py
import socket

s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))

s.listen(5)

while True:
    c, addr = s.accept()
    print 'Got connection from', addr
    c.send('Thank you for your connecting')
    c.close()

和客户:

#client.py
import socket

s = socket.socket()

host = socket.socket()
port = 1234

s.connect((host, port))
print s.recv(1024)

我启动了服务器,然后启动了 4 个客户端,并在服务器的控制台中得到如下输出:

Got connection from ('192.168.0.99', 49170)
Got connection from ('192.168.0.99', 49171)
Got connection from ('192.168.0.99', 49172)
Got connection from ('192.168.0.99', 49173)

元组的第二部分是什么?

【问题讨论】:

    标签: python sockets network-programming


    【解决方案1】:

    来自socket documentation

    AF_INET 地址族使用一对 (host, port),其中 host 是一个字符串,表示 Internet 域表示法中的主机名,如“daring.cwi.nl”或 IPv4 地址,如“100.50.200.5”,端口是一个整数。

    所以第二个值是客户端用于连接的端口号。当建立 TCP/IP 连接时,客户端选择一个传出端口号与服务器通信;服务器返回的数据包将被寻址到该端口号。

    【讨论】:

    • 如何从 accept() 返回的 (host,port) 对中获取端口号整数值?
    • 只是一个元组;使用订阅:returned_tuple[1]
    • @MartijnPieters 如果我调用 s.accept() 但没有待处理的客户怎么办? 'host' 或 'port' 是否有任何值表明这一点?
    • @Daniel:sock.accept() 等待传入的连接尝试并阻塞,直到客户端尝试连接。请注意,accept() 返回一个包含新套接字对象和远程地址的元组。如果没有客户端尝试连接,它将根本不返回
    【解决方案2】:

    引用python documentation:

    socket.accept()

    接受连接。套接字必须绑定到一个地址并监听连接。返回值是一对(conn, address),其中conn是一个新的套接字对象,可用于在连接上发送和接收数据,地址是绑定到连接另一端套接字的地址。

    address 是什么,您可以在同一文档 from words "Socket addresses are represented as follows" 中找到。

    【讨论】:

      猜你喜欢
      • 2011-09-21
      • 2020-05-14
      • 1970-01-01
      • 2019-04-14
      • 2019-12-19
      • 1970-01-01
      • 2020-05-12
      • 2011-06-19
      • 2013-04-09
      相关资源
      最近更新 更多