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.