Create Simple Chat App Using UDP Protocol In Python

Greetings, fellow tech enthusiasts! I'm Shubham Rasal, but you might know me better as the SREngineered.
Over the last three years, I have immersed myself deeply in the intricate universe of DevOps and SRE. Along the way, I've brought life to various technologies and projects, utilizing everything from bash script automation to Kubernetes production clusters. My credentials include the Certified Kubernetes Administrator (CKA) and Ansible Certified Engineer titles, standing testament to my unwavering commitment to and understanding of our craft.
This blog is designed for kindred spirits who are passionate about engineering excellence. My goal is to share my experience, knowledge, and wisdom through tutorials, case studies, and Golang code examples that offer valuable solutions for navigating the continually evolving world of DevOps and SRE.
No matter where your interests lie within the vast landscape of DevOps/SRE, Automation, and Golang, this blog aims to offer valuable insights to help you elevate your skills and understanding. So, buckle in and join me on this journey into the thrilling world of cutting-edge engineering solutions!
When I'm not busy conjuring up elegant engineering solutions, I enjoy getting lost in the immersive worlds of movies and books. Feel free to connect with me on LinkedIn, Twitter, or through email.
In this blog, we are going to create a chat server based on UDP protocol in Python.
Here’s the problem statement:
🔅 Create your own Chat Servers, and establish a network to transfer data using Socket Programing by creating both Server and Client machines as Sender and Receiver both. Do this program using UDP data transfer protocol.
🔅 Use multi-threading concept to get and receive data parallelly from both the Server Sides. Observe the challenges that you face to achieve this using UDP.
Before jump into code, let’s understand
What is UDP?
In computer networking, the User Datagram Protocol is one of the core members of the Internet protocol suite. With UDP, computer applications can send messages, in this case, referred to as datagrams, to other hosts on an Internet Protocol network.
It is a connectionless protocol and not reliable. It is not used in other chatting apps like Facebook and WhatsApp. The communication speed is comparatively fast than the TCP protocol. It is used in online video surfing and gaming.
Creating Chat server[One sided connection]
In this setup, Server only receives messages and the client can only send messages. We can utilize the socket library in python.
In server, we have to write the below code, which will continue in receiving mode using while true.
import socket
#AF_INET used for IPv4
#SOCK_DGRAM used for UDP protocol
s = socket.socket(socket.AF_INET , socket.SOCK_DGRAM )
#binding IP and port
s.bind(("192.168.225..242",2222))
print("Server started ...192.168.225..242:2222")
print("Waiting for Client response...")
#recieving data from client
while True:
print(s.recvfrom(1024))
In client program:
import socket
#client program
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
ip ,port = input("Enter server ip address and port number :\n").split()
m = input("Enter data to send server: ")
res = s.sendto(m.encode(),("192.168.225.242",2222))
if res:
print("\nsuccessfully send")
we can also see the working of it using the below image

You can see on the client end we really don’t need to establish a connection with the client. We can directly send data to the server.
But the problem here is the server can not respond back and the client can not receive any message at the same time.
Here’s we can take help of multi-threading, by which we can receive as well send messages simultaneously.
Both sides communicate using multithreading
In python, we have a threading module, with help we can add many threads to run our program. we can also pass different functions to different threads to run.
Let’s understand with one help. consider the human body is a process and our parts are different threads of it. they are performing their tasks simultaneously. The liver, heart, lungs, brain are the organs involved in the process and each process is running simultaneously.
# chatapp.py
import socket
import threading
import os
s = socket.socket(socket.AF_INET , socket.SOCK_DGRAM )
s.bind(("192.168.225.34",2222))
print("\t\t\t====> UDP CHAT APP <=====")
print("==============================================")
nm = input("ENTER YOUR NAME : ")
print("\nType 'quit' to exit.")
ip,port = input("Enter IP address and Port number: ").split()
def send():
while True:
ms = input(">> ")
if ms == "quit":
os._exit(1)
sm = "{} : {}".format(nm,ms)
s.sendto(sm.encode() , (ip,int(port)))
def rec():
while True:
msg = s.recvfrom(1024)
print("\t\t\t\t >> " + msg[0].decode() )
print(">> ")
x1 = threading.Thread( target = send )
x2 = threading.Thread( target = rec )
x1.start()
x2.start()
Here we are leveraging the power of threads to simultaneously send and receive the messages.
In the above code, I have two functions send() and rec() and we are starting them at the same time. The threading module gives us a Thread class and we can use that to make and start at the same time.

Type quit exiting the program.
UDP is not reliable protocol which does not check that other system is running or not because it is connectionless and does not have any acknowledgment.
Conclusion
We have successfully created a simple chat application using UDP protocol in python.
I would love to hear your thoughts and ideas about these topics. Don’t hesitate to share in the comment section below.
Also, you can always message me over LinkedIn as well.
More Ideas:
You can enhance this setup to send OS commands and get the output back, instead of logging in systems.



