Chapter 1. Sockets, IPv4, and Simple Client/Server Programming
In this chapter, we will cover the following recipes:
Printing your machine's name and IPv4 address
Retrieving a remote machine's IP address
Converting an IPv4 address to different formats
Finding a service name, given the port and protocol
Converting integers to and from host to network byte order
Setting and getting the default socket timeout
Handling socket errors gracefully
Modifying a socket's send/receive buffer size
Changing a socket to the blocking/non-blocking mode
Reusing socket addresses
Printing the current time from the Internet time server
Writing a SNTP client
Writing a simple echo client/server application
Introduction
This chapter introduces Python's core networking library through some simple recipes. Python's socket module has both class-based and instances-based utilities. The difference between a class-based and instance-based method is that the former doesn't need an instance of a socket object. This is a very intuitive approach. For example, in order to print your machine's IP address, you don't need a socket object. Instead, you can just call the socket's class-based methods. On the other hand, if you need to send some data to a server application, it is more intuitive that you create a socket object to perform that explicit operation. The recipes presented in this chapter can be categorized into three groups as follows:
In the first few recipes, the class-based utilities have been used in order to extract some useful information about host, network, and any target service.
After that, some more recipes have been presented using the instance-based utilities. Some common socket tasks, including manipulating the socket timeout, buffer size, blocking mode, and so on, have been demonstrated.
Finally, both class-based and instance-based utilities have been used to construct some clients, which perform some practical tasks, for example, synchronizing the machine time with an Internet server or writing a generic client/server script.
You can use these demonstrated approaches to write your own client/server application.