[Tutor] simple server and client question
R. A.
rob@jam.rr.com
Tue, 13 Feb 2001 18:09:05 -0600
Sweet! I didn't expect such a wealth of replies so quickly, and now I
have a good deal of stuff to play with this evening.
Deirdre, is there any way I could talk you into allowing me to post the
client & server code to Useless Python?
Rob
Deirdre Saoirse wrote:
>
> On Tue, 13 Feb 2001, Rob Andrews wrote:
>
> > The mandate has come from above that I write a simple server and
> > client in Python in preparation for a project in development. The
> > server and client can do absolutely anything, and barely that, if I so
> > choose, as they will not be used in the project (unless my code is
> > brilliant enough to be useful for the project, I suppose, which is
> > unlikely as it's a Java project). The important thing is that I
> > understand how to write such things.
>
> Well, without wrapping a big abstraction around it, sometimes it's just
> fun to play at the low level and see how these things work. Thus, I
> recommend at least trying a very little project at the low level socket
> modele WITHOUT a lot of abstraction, etc. Get your hands dirty.
>
> With all due respect, the prior suggestion for XML-RPC is SO overkill --
> a web server just blats a file out to a port after adding some headers.
>
> Now, with that, you should be able to write a web server of your own; a
> mini web server that can run from inetd.conf (i.e. one that exits right
> after delivering a file) should be able to be written in a very few lines
> of code.
>
> Ok, here's a really stupid client/server pair, just for amusement and
> amazement. This is an adaptation of the examples found in the library
> docs.
>
> The server opens up an unprivileged port (> 1023), in this case, 30242, on
> the server localhost (aka 127.0.0.1). It waits for a client. The client,
> when connected, sends the phrase "foo." The server responds "bar." The
> client waits for the server. They repeat this two times, then the server
> closes the connection.
>
> Ready?
>
> Server code:
>
> import socket
> HOST = '' # Symbolic name meaning the local host
> PORT = 30242 # Arbitrary non-privileged port
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> s.bind((HOST, PORT))
> s.listen(1)
> conn, addr = s.accept()
> print 'Connected by', addr
> count = 0
> while 1:
> data = conn.recv(1024)
> if not data: break
> print "Data received:",data
> if data == 'foo':
> conn.send('bar')
> count = count + 1
> else:
> conn.send('err')
>
> if count == 3:
> break
>
> print 'Closing connection to', addr s.close()
>
> client code:
>
> import socket
> HOST = '' # Symbolic name meaning the local host
> PORT = 30242 # Arbitrary non-privileged port
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> s.connect((HOST, PORT))
> count = 0
> while 1:
> count = count + 1
> if count == 2:
> s.send('boo!')
> else:
> s.send('foo')
> data = s.recv(1024)
> if not data: break
> print data
>
> if count == 4:
> break
>
> print 'Closing connection.' s.close()
>
> _Deirdre
>
> _______________________________________________
> Tutor maillist - Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
--
The Useless Python Repository has received an XHTML face-lift!
http://www.lowerstandard.com/python/pythonsource.html