- PyQt4's udp broadcast doesn't seem to work
- python server.py -s -p 50000 #(server on port 50000)
- python server.py -c -p 50000 #(client sending data to port 50000)
- import sys
- import time
- from PyQt4 import QtNetwork, QtCore
- from optparse import OptionParser
- class Server(object):
- def __init__(self, port):
- self.port = port
- try:
- self.socket = QtNetwork.QUdpSocket()
- self.socket.bind(QtNetwork.QHostAddress.Broadcast, int(self.port), QtNetwork.QUdpSocket.ShareAddress)
- self.socket.readyRead.connect(self.receiver)
- except QtNetwork.QUdpSocket.NetworkError:
- print "EXCEPTION DURING INITIALIZING SERVER'S SOCKET"
- sys.exit(1)
- def receiver(self):
- print "DEBUG: RECEIVE"
- while(self.socket.hasPendingDatagrams()):
- try:
- size = self.socket.pendingDatagramSize()
- msg, host, port = self.socket.readDatagram(size)
- except:
- print "EXCEPTION DURING RECEIVEING AND READING DATAGRAM"
- else:
- print "HOST %s:%s MSG: %s" % (str(host), str(port), str(msg))
- def __del__(self):
- print "DESTRUCTOR"
- self.socket.close()
- class Client(object):
- def __init__(self, port):
- self.port = port
- try:
- self.socket = QtNetwork.QUdpSocket()
- except:
- print "EXCEPTION DURING INITIALIZING CLIENT'S SOCKET"
- self.main_loop()
- def main_loop(self):
- for i in range(20):
- self.debug_msg()
- time.sleep(0.5)
- print "EXITING"
- self.socket.close()
- def debug_msg(self):
- msg = "DEBUG"
- self.socket.writeDatagram(msg, QtNetwork.QHostAddress.Broadcast, int(self.port))
- if __name__ == "__main__":
- parser = OptionParser()
- parser.add_option("-p", "", action="store", type="string", dest="port")
- parser.add_option("-c", "", action="store_true", dest="client")
- parser.add_option("-s", "", action="store_true", dest="server")
- options, args = parser.parse_args()
- if not (options.server or options.client):
- print "Client/Server not specified. Could not continue..."
- sys.exit(1)
- elif not options.port:
- print "Server's port not specified. Could not continue..."
- sys.exit(1)
- else:
- if options.server:
- serv = Server(options.port)
- App = QtCore.QCoreApplication(sys.argv)
- sys.exit(App.exec_())
- else:
- client = Client(options.port)