In this chapter, we reviewed the socket module for implementing client-server architectures in Python with the TCP and UDP protocols. We also discussed basic TCP/IP socket programming using Python's socket and the SSL module. We demonstrated how simple TCP sockets can be wrapped with TLS and used to carry encrypted data. We also talked about the ways to validate the authenticity of a remote server using SSL certificates. Some other minor issues regarding socket programming, such as non-blocking socket I/O, were also presented. The detailed packet analysis with Wireshark in each section helps us to understand what happens under the hood in our socket programming scripts.
In the next chapter, you will learn about the principles of socket-based server design and how to build asynchronous network applications with the asyncio, aiohttp, Tornado, Twisted, and Celery frameworks...