SocketServer class - basis problem

L

lebo

So I'm new to this python stuff - and this has me stumped

# server
import SocketServer

PORT = 8037

class myRequestHandler(SocketServer.StreamRequestHandler):
def handle(self):
self.input = self.rfile.read(1024)
print self.input
self.wfile.write("blah")

server = SocketServer.TCPServer(("", PORT), myRequestHandler)
print "listening on port", PORT
server.serve_forever()

# client
import socket

HOST = socket.gethostname()
PORT = 8037

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hello, world')

# Fails
data = s.recv(1024)

s.close()
print 'Received', data

Why does s.recv() hang the client? It seems like server is not
handing back "blah", but I'm sure it is.....this should be
easy...(sigh)
 
M

Miki Tebeka

Hello, Leonard,
data = s.recv(1024)
s.close()
print 'Received', data

Why does s.recv() hang the client? It seems like server is not
handing back "blah", but I'm sure it is.....
I think that the socket buffer is not full (since you are waiting for
1024 and "blah" is not enough).
this should be easy...(sigh)
If it was that easy it won't be interesting ;-)

Have a look at http://www.amk.ca/python/howto/sockets/

HTH.
Miki
 
S

Steve Holden

lebo said:
So I'm new to this python stuff - and this has me stumped
[sample code]

Why does s.recv() hang the client? It seems like server is not
handing back "blah", but I'm sure it is.....this should be
easy...(sigh)

<gratuitous self-advertisement>
If you're going to OSCON you might like to sign up for the Python Network
Programming tutorial - see
http://conferences.oreillynet.com/cs/os2003/view/e_sess/4165

This tutorial is intended to help network programming beginners to write
their own networking code.
</gratuitous self-advertisement>

regards
 
P

Peter Hansen

Miki said:
Hello, Leonard,
I think that the socket buffer is not full (since you are waiting for
1024 and "blah" is not enough).

This is not how the size parameter to recv() is used. It is a
*maximum*, meaning any amount of data from zero bytes (if the
socket is closed) to that value will be returned, with *no*
guarantees how much is actually returned. Often, but absolutely
not always, you will get a whole "line" and newbies will be
deceived into thinking it's enough just to recv(1024) and
carry on, but eventually such code will fail.

-Peter
 

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

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,046
Latest member
Gavizuho

Latest Threads

Top