2013-04-26 5 views
2
from twisted.internet import protocol, reactor, task 

class peer(protocol.DatagramProtocol): 

    def sendJoin(self): 
     self.transport.write('Join',("127.0.0.1", 8001)) 

    def startProtocol(self): 
     self.sendJoin() 

reactor.listenUDP(8002, peer())#if this is busy, listen on next available port 
reactor.run() 

다른 피어가 이미 포트에서 수신 대기중인 경우 어떻게 다른 포트에서 수신 대기하는지 확인하십시오. 8003?바쁜 경우 다른 포트에서 수신 대기하는 방법

답변

3

잡아라 twisted.internet.error.CannotListenError 루프에서, reactor.listenUDP() 제기하고 다음 포트를 다시 시도 :

from twisted.internet import protocol, reactor, task 
import twisted.internet.error 

class peer(protocol.DatagramProtocol): 

    def sendJoin(self): 
     self.transport.write('Join',("127.0.0.1", 8001)) 

    def startProtocol(self): 
     self.sendJoin() 

# just to make sure ports 8002 and 8003 will be in use 
reactor.listenUDP(8002, peer()) 
reactor.listenUDP(8003, peer()) 

# try all ports between [8002..8999] 
for port in range(8002, 9000): 
    try: 
     reactor.listenUDP(port, peer()) 
     print "Listening on port %d" % port 
     break 
    except twisted.internet.error.CannotListenError, ex: 
     print "Port is %d busy: %s" % (port, ex) 
     continue 
reactor.run() 
관련 문제