您好我正在尝试将一些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")
答案 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)
希望这能为您提供一个可以构建的想法。