Skip to content

Sockets

TCP Server

python
# server.py
import socket
import threading
import time

def handle_client(clientsocket, addr):
    print("*" * 50)
    print(f"Client connected from: {addr[0]}:{addr[1]}")
    currentTime = time.ctime(time.time()) + "\r\n"
    print("Sending time:", currentTime.strip())
    print("*" * 50)
    clientsocket.send(currentTime.encode('ascii'))
    clientsocket.close()

def start_server():
    host = "172.1.27.11"  # VM1's IP address
    port = 9998        # Listening port

    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind((host, port))
    serversocket.listen(5)

    print(f"Server started at {host} on port {port}")
    print("Waiting for incoming connections...")

    while True:
        clientsocket, addr = serversocket.accept()
        client_thread = threading.Thread(target=handle_client, args=(clientsocket, addr))
        client_thread.start()

if __name__ == "__main__":
    start_server()

TCP Client

python
# client.py
import socket

host = "172.1.27.11"  # IP address of the server (VM1)
port = 9998        # Same port as server

try:
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((host, port))
    data = client_socket.recv(1024)
    client_socket.close()

    print("*" * 50)
    print("The time received from the server is:", data.decode('ascii').strip())
    print("*" * 50)

except ConnectionRefusedError:
    print("Connection failed: Make sure the server is running and accessible.")
except Exception as e:
    print("An error occurred:", e)

UDP Server

python
# UDPServer.py
import socket
import time

def start_udp_server():
    host = "192.168.0.134"  # Your server VM's IP
    port = 9999             # A different port for UDP

    serversocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    serversocket.bind((host, port))

    print(f"UDP Server started at {host} on port {port}")
    print("Waiting for incoming datagrams...")

    while True:
        data, addr = serversocket.recvfrom(1024)
        print("*" * 50)
        print(f"Received message from: {addr[0]}:{addr[1]}")
        print(f"Message: {data.decode().strip()}")

        currentTime = time.ctime(time.time()) + "\r\n"
        serversocket.sendto(currentTime.encode('ascii'), addr)
        print(f"Sent time back to {addr}")
        print("*" * 50)

if __name__ == "__main__":
    start_udp_server()

UDP Client

python
# UDPClient.py
import socket

host = "192.168.0.134"  # IP of the server VM
port = 9999             # Same port as UDP server

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

try:
    message = "Hello UDP Server!"
    client_socket.sendto(message.encode(), (host, port))

    data, server = client_socket.recvfrom(1024)
    print("*" * 50)
    print("The time received from the server is:", data.decode('ascii').strip())
    print("*" * 50)

except Exception as e:
    print("An error occurred:", e)
finally:
    client_socket.close()

Made with ❤️ for students, by a fellow learner.