我正在开发一个与 Twisted 套接字交互以允许在线游戏的二十一点 iPhone 应用程序。我目前的问题是找到正确的端口。让我解释。
我创建了一个名为“Table”的类。它保存像二十一点牌桌一样的信息,如位置、玩家和牌组。一张表分配给一个Twisted socket,一个socket分配给一个端口。现在,我只测试端口 1025-1034。
我想要发生的是应用程序请求按端口升序获取每张桌子上的玩家数量。为了测试,我只允许 1 个用户在一张桌子旁。如果有 1 个用户在一张桌子旁,我希望套接字返回 Table_Not_Found,但是,即使用户在一张桌子旁,套接字也会返回一个人所在的端口,而不是下一个没有人的端口。
我不认为我在使用 Table 类做正确的事情并搜索打开的表。如何找到正确的端口?应用程序连接到一个端口,如果该端口被占用,则返回 Table_Not_Found,然后应用程序请求下一个可用端口。但在我的情况下,套接字总是返回所占用的端口。我只能用我的 iMac 和 MacBook 进行测试,因为它们是客户端。
底线,我如何在端口上搜索可用的表?
谢谢!
class Table:
def __init__(self):
self.players = []
self.positions = []
self.id = 0
self.numberOfPlayers = 0
def setID(self, _id):
self.id = _id
def setActivePlayer(self, player):
player.countdown = 20
while player.count > 0:
print player.countdown
time.sleep(1)
player.countdown -= 1
if player.countdown == 0:
print "Out of time"
moves.surrender(player)
class Socket(Protocol):
table = Table()
def connectionMade(self):
#self.transport.write("""connected""")
self.factory.clients.append(self)
print "Clients are ", self.factory.clients
def connectionLost(self, reason):
self.factory.clients.remove(self)
def dataReceived(self, data):
#print "data is ", data
a = data.split(':')
if len(a) > 1:
command = a[0]
content = a[1]
b = content.split(';')
_UDID = b[0].replace('\n', '')
if command == "Number_of_Players":
if Socket.table.numberOfPlayers == 0:
msg = "%s:TableFound" % _UDID
elif Socket.table.numberOfPlayers == 1:
msg = "%s:Table_Not_Found" % _UDID
print msg
for c in self.factory.clients:
c.message(msg)
def message(self, message):
self.transport.write(message)
NUM_TABLES = 10
factories = [ ]
for i in range(0, NUM_TABLES):
print i
factory = Factory()
factory.protocol = Socket
factory.clients = []
factories.append(factory)
reactor.listenTCP(1025+i, factory)
#print "Blackjack server started"
reactor.run()