1

您好我正在尝试将一些 C 代码移植到 python。几个月没用python了,感觉有点生疏了。

想知道我怎么能做到这一点。我需要能够在 createConnection 函数中使用 sock 对象的发送值,而无需使 sock 对象成为全局对象。

有任何想法吗?

*干杯

示例代码

def createConnection(host, port, tcpTimeout):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
    sock.connect((host, port))
    return sock

def useConnectionOne():
    sock = createConnection("<Some IP>", <Some Port>, 5)
    sock.send("Hello world")

def useConnectionTwo():
    sock = createConnection("<Some IP>", <Some Port>, 5)
    sock.send("Hello again world")
4

1 回答 1

1

您要么需要使套接字对象成为全局对象,以便它们可以重复使用,要么将它们附加到其他对象/容器以跟踪它们。你可以这样做:

Connections = {}
Connections['host1'] = createConnection("<Some IP>", <Some Port>, 5)
Connections['host2'] = createConnection("<Some Other IP>", <Some Port>, 5)

然后你可以发送:

Connections['host1'].send("Hello World")

但是,如果没有一些外部容器,您的套接字对象会离开作用域,并在创建它们的函数返回时被垃圾收集。

如果我以某种方式误解了您,并且您想要一个连接对象并且能够编写两个分别使用它的方法,请创建一个包含该连接的类:

class ConnManager(object):
  def __init__(self, host, port, timeout)
    self._conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
    self._conn.connect((host, port))

  def sendOne(self, data):
    self._conn.send(data)

  def sendTwo(self, data):
    self._conn.send(data)

希望这能给你一个可以构建的想法。

于 2012-11-26T17:15:46.853 回答