problem with sockets code

D

Daniel

Hello,

I can't seem to get my sockets code to work right. Here is what I
have inside my RequestHandler handle() function:

total_data=[]

data = True
logger_server.debug(self.__class__.__name__ + ' set data =
True')
while data:
logger_server.debug(self.__class__.__name__ + ' receive
first readline() of data')
data = self.rfile.readline().strip()
logger_server.debug(self.__class__.__name__ + ' first
readline() of data = %s' % data)
total_data.append(data)
receivedCommand = '\n'.join(total_data)

And this is what I have inside my client code

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('localhost',5001))

sock.sendall('Hello, world\r\n')
data = sock.recv(1024)
sock.close()
print 'Received', repr(data)

There's a little more to it, but this is enough for me to ask my
question. The problem is that I can't get the server loop (while
data:) to stop without closing the connection, but I want to receive
something back from the server before closing the sockets connection.
My logs show that the server never leaves the loop.

Thanks in advance.
 
J

James Mills

Hello,

I can't seem to get my sockets code to work right. Here is what I
have inside my RequestHandler handle() function:

total_data=[]

data = True
logger_server.debug(self.__class__.__name__ + ' set data =
True')
while data:
logger_server.debug(self.__class__.__name__ + ' receive
first readline() of data')
data = self.rfile.readline().strip()
logger_server.debug(self.__class__.__name__ + ' first
readline() of data = %s' % data)
total_data.append(data)
receivedCommand = '\n'.join(total_data)

And this is what I have inside my client code

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('localhost',5001))

sock.sendall('Hello, world\r\n')
data = sock.recv(1024)
sock.close()
print 'Received', repr(data)

There's a little more to it, but this is enough for me to ask my
question. The problem is that I can't get the server loop (while
data:) to stop without closing the connection, but I want to receive
something back from the server before closing the sockets connection.
My logs show that the server never leaves the loop.

Thanks in advance.

Daniel,

You really should use an existing framework to help
you write your application here. You're using the
plain old (standard-library) sockets module.

I would suggest you use either Twisted, or pymills.

Twisted is more feature-rich, and a general purpose
event-driven framework. It can be a little overwhelming
to use.

pymills is my event-driven, component architecture
library that allows you to build event-driven systems
very easily with a component design.

You can download pymills from here:
http://hg.shortcircuit.net.au/index.wsgi/pymills/archive/tip.tar.gz

Or you can get the latest developmen branch by using
Mercurial and cloning it:

hg clone http://hg.shortcircuit.net.au/index.wsgi/pymills/

Here is a simple EchoServer that you could modify
to suit your application needs:

<code>
#!/usr/bin/env python

from pymills import event
from pymills.event import *
from pymills.net.sockets import TCPServer

class Echo(TCPServer):

@listener("read")
def onREAD(self, sock, data):
self.write(sock, data)

def main():
echo = Echo(8000)
event.manager += echo

while True:
try:
manager.flush()
echo.poll()
except KeyboardInterrupt:
break

if __name__ == "__main__":
main()
</code>

cheers
James
 
L

Lawrence D'Oliveiro

In message
Daniel said:
while data:
...
data = self.rfile.readline().strip()

Interpreting a random string value as a Boolean is a bad idea.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top