Python套接字使用函数而不是全局套接字调用

时间:2012-11-26 16:31:54

标签: python

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

想知道我该怎么做。我需要能够在createConnection函数中使用sock对象的send值而不使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")

1 个答案:

答案 0 :(得分: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)

希望这能为您提供一个可以构建的想法。