【问题标题】:Why and how am i supposed to use socket.accept() in python?为什么以及如何在 python 中使用 socket.accept()?
【发布时间】:2016-09-17 09:33:33
【问题描述】:

这个accept() 方法返回一个带有新套接字和地址的元组,但是如果我已经有了一个新套接字,为什么我需要一个新套接字,那么为什么不使用它呢?

import socket
sock = socket.socket()
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()

print 'connected:', addr

while True:
    data = conn.recv(1024)
    if not data:
        break
   conn.send(data.upper())

conn.close()

ps:当我用 Java 编写套接字时,我真的没有这种接受的东西,我只需要每个客户端一个套接字,每个服务器一个,这是有道理的。

【问题讨论】:

标签: java python sockets


【解决方案1】:

在服务器运行时,您有一个处于活动状态的侦听套接字,并且为每个接受的连接创建一个新的已连接套接字,该套接字在连接关闭之前一直处于活动状态。

【讨论】:

    【解决方案2】:

    好像你之前没有在 Java 中实现过 TCP。

    您提供的示例使用默认的AF_INETSOCK_STREAM默认是 TCP:

    socket.socket([family[, type[, proto]]]) 使用给定的地址族、套接字类型和协议号创建一个新套接字。地址族应该是 AF_INET(默认)、AF_INET6 或 AF_UNIX。套接字类型应该是 SOCK_STREAM(默认)、SOCK_DGRAM 或者可能是其他 SOCK_ 常量之一。协议号通常为零,在这种情况下可以省略。

    如果您实施了SOCK_DGRAM,即UDP,则不需要使用sock.accept()

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多