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

Untitled

By: a guest on May 15th, 2012  |  syntax: None  |  size: 2.51 KB  |  hits: 21  |  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. PyQt4's udp broadcast doesn't seem to work
  2. python server.py -s -p 50000 #(server on port 50000)
  3. python server.py -c -p 50000 #(client sending data to port 50000)
  4.        
  5. import sys
  6. import time
  7.  
  8. from PyQt4 import QtNetwork, QtCore
  9. from optparse import OptionParser
  10.  
  11. class Server(object):
  12.  
  13.     def __init__(self, port):
  14.  
  15.         self.port = port
  16.  
  17.         try:
  18.             self.socket = QtNetwork.QUdpSocket()
  19.             self.socket.bind(QtNetwork.QHostAddress.Broadcast, int(self.port), QtNetwork.QUdpSocket.ShareAddress)
  20.  
  21.             self.socket.readyRead.connect(self.receiver)
  22.  
  23.         except QtNetwork.QUdpSocket.NetworkError:
  24.             print "EXCEPTION DURING INITIALIZING SERVER'S SOCKET"
  25.             sys.exit(1)
  26.  
  27.     def receiver(self):
  28.         print "DEBUG: RECEIVE"
  29.         while(self.socket.hasPendingDatagrams()):
  30.             try:
  31.                 size = self.socket.pendingDatagramSize()
  32.                 msg, host, port = self.socket.readDatagram(size)
  33.             except:
  34.                 print "EXCEPTION DURING RECEIVEING AND READING DATAGRAM"
  35.             else:
  36.                 print "HOST %s:%s MSG: %s" % (str(host), str(port), str(msg))
  37.  
  38.     def __del__(self):
  39.         print "DESTRUCTOR"
  40.         self.socket.close()
  41.  
  42. class Client(object):
  43.  
  44.     def __init__(self, port):
  45.  
  46.         self.port = port
  47.  
  48.         try:
  49.             self.socket = QtNetwork.QUdpSocket()
  50.         except:
  51.             print "EXCEPTION DURING INITIALIZING CLIENT'S SOCKET"
  52.  
  53.         self.main_loop()
  54.  
  55.     def main_loop(self):
  56.         for i in range(20):
  57.             self.debug_msg()
  58.             time.sleep(0.5)
  59.         print "EXITING"
  60.         self.socket.close()
  61.  
  62.  
  63.     def debug_msg(self):
  64.         msg = "DEBUG"
  65.         self.socket.writeDatagram(msg, QtNetwork.QHostAddress.Broadcast, int(self.port))
  66.  
  67.  
  68. if __name__ == "__main__":
  69.  
  70.     parser = OptionParser()
  71.     parser.add_option("-p", "", action="store", type="string", dest="port")
  72.     parser.add_option("-c", "", action="store_true", dest="client")
  73.     parser.add_option("-s", "", action="store_true", dest="server")
  74.  
  75.     options, args = parser.parse_args()
  76.  
  77.     if not (options.server or options.client):
  78.         print "Client/Server not specified. Could not continue..."
  79.         sys.exit(1)
  80.  
  81.     elif not options.port:
  82.         print "Server's port not specified. Could not continue..."
  83.         sys.exit(1)
  84.  
  85.     else:
  86.  
  87.         if options.server:
  88.             serv = Server(options.port)
  89.  
  90.             App = QtCore.QCoreApplication(sys.argv)
  91.             sys.exit(App.exec_())
  92.         else:
  93.             client = Client(options.port)