Chapter 7. Programming with Sockets

After you have interacted with various clients/servers in Python, you will be keen to create your own custom clients and servers for any protocol of your choice. Python provides a good coverage on the low-level networking interface. It all starts with BSD socket interface. As you can assume, Python has a socket module that gives you the necessary functionality to work with the socket Interface. If you have ever done socket programming in any other language like C/C++, you will love the Python socket module.

In this chapter, we will explore the socket module by creating a diverse range of Python scripts.

The following are the highlights of this chapter:

  • Basics of sockets
  • Working with TCP sockets
  • Working with UDP sockets
  • TCP port forwarding
  • Non-blocking socket I/O
  • Securing sockets with SSL/TLS
  • Creating custom SSL client/server

Basics of sockets

Network programming in any programming language can begin with sockets. But what is a socket? Simply put, a network socket is a virtual end point where entities can perform inter-process communication. For example, one process sitting in a computer, exchanges data with another process sitting on the same or another computer. We typically label the first process which initiates the communication as the client and the latter one as the server.

Python has quite an easy way to start with the socket interface. In order to understand this better, let's see the big picture first. In the following figure, a flow of client/server interaction is shown. This will give you an idea of how to use the socket API.

Basics of sockets

client/server interaction through socket

In the interaction between a typical client and a server, the server process has to work a bit more, as you may have thought. After creating a socket object, the server process binds that socket to a particular IP address and port. This is much like a telephone connection with an extension number. In a corporate office, after a new employee has been allocated with his desk phone, usually he or she will be assigned to a new extension number. So, if anybody makes a phone call to this employee, the connection can be established using his phone number and extension. After the successful binding, the server process will start listening for a new client connection. For a valid client session, the server process can accept the request of the client process. At this point, we can say that the connection between the server and the client has been established.

Then the client/server enters into the request/response loop. The client process sends data to the server process, and the server process processes the data and returns a response to the client. When the client process finishes, it exits by closing down the connection. At that moment, the server process probably goes back to the listening state.

The above interaction between client and server is a very simplified representation of the actual reality. In practice, any production server process has multiple threads or subprocesses to handle concurrent connections from thousands of clients over respective virtual channels.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.144.28.70