Socket and cycle problem
petr.poupa at gmail.com
petr.poupa at gmail.com
Mon May 12 12:19:48 EDT 2008
On 12 Kvě, 17:54, Jean-Paul Calderone <exar... at divmod.com> wrote:
> On Mon, 12 May 2008 08:34:07 -0700 (PDT), petr.po... at gmail.com wrote:
> >Hello,
> >I am beginner but so I need help. I have small script for receive data
> >from port 3883, but it print only once.
>
> >import socket
>
> >HOST = 'localhost'
> >PORT = 3883
> >s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> >s.connect((HOST, PORT))
> >data = s.recv(2048)
> >s.close()
> >print 'receive data from server:', `data`
>
> >So I try to write cycle to this script, like this:
>
> >import socket
>
> >HOST = 'localhost'
> >PORT = 3883
> >s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> >while 1:
> > s.connect((HOST, PORT))
> > data = s.recv(2048)
> > s.close()
> > print 'receive data from server:', `data`
>
> >But Python reporting:
>
> >Traceback (most recent call last):
> > File "C:\Documents and Settings\poupa\Plocha\TCP3.py", line 7, in
> ><module>
> > s.connect((HOST, PORT))
> > File "<string>", line 1, in connect
> > File "C:\Python25\lib\socket.py", line 141, in _dummy
> > raise error(EBADF, 'Bad file descriptor')
> >error: (9, 'Bad file descriptor')
>
> >Where is the mistake? I dont know.
>
> You cannot reconnect a socket. You need to create a new one for each
> connection. It's also almost certainly the case that the way you are
> receiving data is incorrect. There is no guarantee that you will get
> 2048 bytes from socket.recv(2048). It isn't even guaranteed that all
> the bytes written to the socket by the peer will be returned by such
> a call. Instead, you need a framing protocol to determine when all
> data has been received. For example, you might length prefix the
> data, or you might insert a delimiter (or a terminator) at the end. Or
> if there is exactly one message to receive, then you should just read
> until the recv call returns '', indicating EOF.
>
> Jean-Paul
ok thanks, but I am true greenhorn, so you think that the best way is
write new script?
Could you send me code if it isnt long, becase I have no idea and
unfortunately time as well.
Petr
Petr
More information about the Python-list
mailing list