Python plays an essential role in network programming. The standard library of Python has full support for network protocols, encoding, and decoding of data and other networking concepts, and it is simpler to write network programs in Python than that of C++.
Here, we will learn about the essence of network programming concerning Python. But for this, the programmer must have basic knowledge of:
- Low-Level Programming using sockets
- Data encoding
- HTTP and web-programming
- High-Level client modules
- Basic networking terms and their concepts etc.
Python Network Services
There are two levels of network service access in Python. These are:
- Low-Level Access
- High-Level Access
In the first case, programmers can use and access the basic socket support for the operating system using Python's libraries, and programmers can implement both connection-less and connection-oriented protocols for programming.
Application-level network protocols can also be accessed using high-level access provided by Python libraries. These protocols are HTTP, FTP, etc.
A socket is the end-point in a flow of communication between two programs or communication channels operating over a network. They are created using a set of programming requests called socket API (Application Programming Interface). Python's socket library offers classes for handling common transports as a generic interface.
Sockets use protocols for determining the connection type for port-to-port communication between client and server machines. The protocols are used for:
- Domain Name Servers (DNS)
- IP addressing
- FTP (File Transfer Protocol) etc...
Python has a socket method that let programmers' set-up different types of socket virtually. The syntax for the socket method is:
g = socket.socket (socket_family, type_of_socket, protocol=value)
For example, if we want to establish a TCP socket, we can write the following code snippet:
# imports everything from 'socket' from socket import * # use socket.socket() - function tcp1=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Here's another example to establish a UDP socket. The code is:
udp1=socket.socket (socket.AF_INET, socket.SOCK_DGRAM)
After you defined the socket, you can use several methods to manage the connections. Some of the important server socket methods are:
- listen(): is used to establish and start TCP listener.
- bind(): is used to bind-address (host-name, port number) to the socket.
- accept(): is used to TCP client connection until the connection arrives.
- connect(): is used to initiate TCP server connection.
- send(): is used to send TCP messages.
- recv(): is used to receive TCP messages.
- sendto(): is used to send UDP messages
- close(): is used to close a socket.
A Simple Network Program Using Python
import socket T_PORT = 60 TCP_IP = '127.0.0.1' BUF_SIZE = 30 # create a socket object name 'k' k = socket.socket (socket.AF_INET, socket.SOCK_STREAM) k.bind((TCP_IP, T_PORT)) k.listen(1) con, addr = k.accept() print ('Connection Address is: ' , addr) while True : data = con.recv(BUF_SIZE) if not data: break print ("Received data", data) con.send(data) con.close()
Save the file with filename - tcpserver.py
It will open a web server at port 60. In the above program, everything you write in the client goes to the server.
Now a simple Python client script:
import socket T_PORT = 5006 TCP_IP = '127.0.0.1' BUF_SIZE = 1024 MSG = "Hello karl" # create a socket object name 'k' k = socket.socket (socket.AF_INET, socket.SOCK_STREAM) k.connect((TCP_IP, T_PORT)) k.send(MSG) data = k.recv(BUF_SIZE) k.close
Sending messages back and forth using different basic protocols is simple and straightforward. It shows that programming takes a significant role n client-server architecture where the client makes data request to a server, and the server replies to those machines.