Python Sockets: Clean, Concise
I was recently pleased to find an excuse to code some Python for the first time. I am impressed. Python doesn't feel like other programming languages. When I write Python I feel like I'm just telling the computer what to do, rather than constantly worrying about essoteric language issues. What I mean is this. While coding Java, I am constantly thinking about class design, exception handling, patterns, etc. While coding C++, I worry a lot about memory management and I spend a lot of time trying to remember funky STL APIs. However, while coding Python the other day, I almost forgot I was programming. It was like I was just telling the computer what to do, line after line. My day's work culminated with a pleasant experience coding to the Python socket API. Read on for the details.
Coding Python client sockets is simple and intuitive. You just create a socket, set it up, connect it, and let Python's superb exception handling take care of any problems. Like this:
-
try:
-
host = "example.com"
-
port = 80
-
# Create a socket object:
-
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
-
# If any operation takes more than 2 seconds, drop to the "except" below
-
s.settimeout( 2 )
-
# Connect to the host
-
s.connect( ( host, port ) )
-
# Send "Some string\n" to the host
-
s.send( "Some string\n" )
-
# See if the host has anything to say in reply
-
response_string, server = s.recvfrom(4096)
-
# Print the response
-
print response_string
-
-
except socket.error, msg:
-
# If anything bad happened above, this runs:
-
print "An error occurred:", msg
-
-
else:
-
# If all went well (no exceptions), we get here:
-
print "Succcess!"
All told, I got a good ROI on learning Python. I had a working application, complete with error handling, in under a day with minimal code. There is a plethora of Python info on the web, and though I find its documentation site to be lacking compared to PHP's docs, it's pretty good.
June 19th, 2007 at 8:01 am
very nice, that worked immediately.
now to implement it on the localhost ^.^