Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 6th, 2012  |  syntax: None  |  size: 1.87 KB  |  hits: 22  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Python UDP recvfrom() specific address
  2. class Server:
  3.     def __init__(self):
  4.         #host = '192.168.0.2'
  5.         host = '127.0.0.1'
  6.         port = 50007
  7.         addr = (host, port)
  8.         self.UDPSock = socket(AF_INET, SOCK_DGRAM)
  9.         self.UDPSock.bind(addr)
  10.         self.UDPSock.settimeout(5.0)
  11.         self.searchForClients = True
  12.         self.playersOnline = []
  13.         threading.Thread(target=self.permission).start()
  14.         Gui.add_event("Server online on port %s" % port)
  15.  
  16.  
  17.     def permission(self):
  18.         global _status
  19.         while self.searchForClients:
  20.             time.sleep(0.5)
  21.             _status.set("Status: Running; Connected: %s" % len(self.playersOnline))
  22.             try:
  23.                 clientMessage, addr = self.UDPSock.recvfrom(1024) # , MSG_PEEK
  24.             except:
  25.                 clientMessage = ""
  26.             if clientMessage == "CONNECT" and addr not in self.playersOnline:                      
  27.                 if self.searchForClients:
  28.                     self.addNewClient(addr)
  29.  
  30.             elif clientMessage == "DISCONNECT" and addr in self.playersOnline:
  31.                 self.removeClient(addr)
  32.  
  33.         Gui.add_event("No longer accepting logins")
  34.         return False
  35.  
  36.     def clientRequests(self, addr):
  37.         latestRequest = time.time()
  38.         while addr in self.playersOnline:
  39.             time.sleep(0.01)
  40.             try:
  41.                 data, requestAddr = self.UDPSock.recvfrom(1024)
  42.             except:
  43.                 requestAddr, data = "", ""
  44.             if requestAddr == addr:
  45.                 latestRequest = time.time()
  46.                 dataCommand = data.split(':')
  47.             if time.time() - latestRequest > 2:
  48.                 if addr in self.playersOnline:
  49.                     self.removeClient(addr)
  50.  
  51.         if not self.searchForClients:      
  52.             Gui.add_event("Player %s(%s) forcibly removed" % addr)
  53.         return False