2012-11-26 2 views
0

안녕하세요, 저는 파이썬에 C 코드를 포팅하려고합니다. 몇 달 안에 파이썬을 사용하지 않았으므로 조금 녹슬 었습니다.파이썬 소켓은 글로벌 소켓 호출 대신 함수를 사용합니다.

어떻게 할 수 있는지 궁금합니다. sock 객체를 전역으로 생성하면서 createConnection 함수에서 sock 객체의 send 값을 사용할 수 있어야합니다.

어떤 아이디어가 있습니까?

* 환호

예제 코드 당신이 하나가 그들을 추적하기 위해 그들이 다시 사용할 수 있도록 소켓 글로벌 개체를 만들거나 다른 객체/컨테이너에 첨부 할 필요가

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

"createConnection에서 sock 객체의 전송 값을 사용할 수 있어야합니다"는 의미는 무엇입니까? – Bakuriu

+0

createacnection "sock = createConnection (" ", , 5)를 호출 할 수있다. 그런 다음 sock.send()를 사용할 수있다 :-) – townlong

+0

socket.create_connection()을 통해'createConnection '? – glglgl

답변

0

. 당신이 뭔가를 할 수 있습니다 :

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) 

희망이 당신에게 아이디어를 제공합니다 에서 구축 할 수 있습니다.

관련 문제