Plz help..SocketServer UDP server losing lots of packets

I D id.engg at gmail.com
Thu Nov 6 09:57:24 EST 2008


Hello James,
Thanks for your response.
But I cannot use a third party software, I need to use the exisiting API's
within python.
As I am new to python, I suspected that I should go by a simpler approach
and so
scrapped off the below code and wrote a very simple UDP server code as
follows:

logFileName = '/home/msat/gsc/logs/' + compNum + '/logparsertracedump.log'
        logfile = open(logFileName, "w")
        from socket import *
        host = "121.3.0.1"
        port = PORT
        buf = 4096
        addr = (host,port)
        # Create socket and bind to address
        UDPSock = socket(AF_INET,SOCK_DGRAM)
        UDPSock.setsockopt(SOL_SOCKET, SO_RCVBUF, 8388608)
        UDPSock.bind(addr)
        while 1:
                data,addr = UDPSock.recvfrom(buf)
                if not fileExists(logFileName):
                        logfile = open(logFileName, "a")
                logfile.writelines(data)
        # Close socket
        UDPSock.close()

Even this seems to lose packets, I would really appreciate if any pointers
can be provided to improve my code.

Thanks,
Sam

On Wed, Nov 5, 2008 at 7:46 PM, James Mills <prologic at shortcircuit.net.au>wrote:

> On Thu, Nov 6, 2008 at 9:53 AM,  <id.engg at gmail.com> wrote:
> > logFileName = 'log.txt'
> >        logfile = open(logFileName, "a")
> >        class MyUDPServer(SocketServer.UDPServer):
> >                def server_bind(self):
> >                        self.socket.setsockopt(socket.SOL_SOCKET,
> > socket.SO_RCVBUF, 8388608)
> >                        self.socket.bind(self.server_address)
> >
> >        class LogsDumpHandler(SocketServer.DatagramRequestHandler):
> >                def handle(self):
> >                        global logfile
> > # fileExists is a function which checks the existence of a file
> >                        if not fileExists(logFileName):
> >                                logfile = open(logFileName, "a")
> >                        logfile.writelines(self.rfile.readlines())
> >
> >        server = MyUDPServer(("",PORT), LogsDumpHandler)
> >        server.serve_forever()
> >        logfile.close()
>
> This is horrible code :/
>
> Try these instead:
>  * UDPServer ->
> http://trac.softcircuit.com.au/circuits/browser/examples/udpserver.py
>  * UDPClient  ->
> http://trac.softcircuit.com.au/circuits/browser/examples/udpclient.py
>
> Example usage
> ----------------------
>
> ~/circuits/examples
> $ ./udpserver.py
> 127.0.0.1, 9000:
> test
> 127.0.0.1, 9000:
> hi
>
> ~/circuits/examples
> $ ./udpclient.py -b 127.0.0.1:9000 127.0.0.1:8000
> test
> 127.0.0.1, 8000:
> test
> hi
> 127.0.0.1, 8000:
> hi
>
> You can download circuits from http://trac.softcircuit.com.au/circuits/
> or get the latest development version by using Mercurial (1):
> hg clone http://hg.softcircuit.com.au/projects/circuits/
>
> cheers
> James
>
> [1] http://www.selenic.com/mercurial/wiki/
>
> --
> --
> -- "Problems are solved by method"
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20081106/29e3a979/attachment-0001.html>


More information about the Python-list mailing list