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