Re: Plz help..SocketServer UDP server losing lots of packets

2008-11-06 Thread I D
On Thu, Nov 6, 2008 at 10:27 AM, James Mills
<[EMAIL PROTECTED]>wrote:

> On Fri, Nov 7, 2008 at 12:57 AM, I D <[EMAIL PROTECTED]> wrote:
> > Thanks for your response.
> > But I cannot use a third party software, I need to use the exisiting
> API's
> > within python.
>
> Why ?


@Sam@ That is the requirement of the assignment.


>
>
> > Even this seems to lose packets, I would really appreciate if any
> pointers
> > can be provided to improve my code.
>
> You do realize that UDP is the User Datagram
> Protocol and has no Control mechanisms.
> You _cannot_ guarantee that packets will
> arrive in the right order, if at all.


@Sam@ I understand that, but a similar UDP server written in C works
perfect, not even a single packet loss, that leads me to believe that I am
not doing something right in my python code.

>
>
> In all my tests however on local machines
> and across machines in a LAN, I don't
> loose packets. I do recommend you use
> circuits (or twisted).
>
> --JamesMills
>
> --
>  --
> -- "Problems are solved by method"
>
--
http://mail.python.org/mailman/listinfo/python-list


Re: Plz help..SocketServer UDP server losing lots of packets

2008-11-06 Thread I D
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 <[EMAIL PROTECTED]>wrote:

> On Thu, Nov 6, 2008 at 9:53 AM,  <[EMAIL PROTECTED]> 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"
>
--
http://mail.python.org/mailman/listinfo/python-list