Solution and implementation for Q9 from Computer Networks (cnl).
UDP File Transfer (Same Device or Network)
This program transfers files using UDP sockets.
Can work on the same device (localhost) or between devices on the same network.
Files Required
receiver.py - UDP Server (receives files)
sender.py - UDP Client (sends files)
-----------------------------------------------
receiver.py:
import socket
import os
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(("0.0.0.0", 5001))
print("[+] UDP Server listening on port 5001")
os.makedirs("received_files", exist_ok=True)
# Receive filename
data, addr = server.recvfrom(4096)
filename = data.decode()
print(f"Receiving: {filename} from {addr}")
# Receive file data
with open(f"received_files/{filename}", "wb") as f:
while True:
data, addr = server.recvfrom(4096)
if data == b"EOF":
break
f.write(data)
print(f"Saved: {filename}")
-------------------------------------------------------
sender.py
import socket
import os
server_ip = "127.0.0.1" # Use "127.0.0.1" for same device, or receiver's IP for network
server_port = 5001
filepath = r"C:\Users\YourName\Desktop\dog.jpeg"
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
if not os.path.isfile(filepath):
print(f"[-] File '{filepath}' does not exist.")
else:
filename = os.path.basename(filepath)
client.sendto(filename.encode(), (server_ip, server_port))
with open(filepath, "rb") as f:
while (chunk := f.read(4096)):
client.sendto(chunk, (server_ip, server_port))
client.sendto(b"EOF", (server_ip, server_port))
print(f"File '{filename}' sent to {server_ip}:{server_port}")
-----------------------------------------------------------------------
How to Run
For SAME DEVICE (localhost):
Set server_ip = "127.0.0.1" in sender.py
Terminal 1:
python receiver.py
Terminal 2:
python sender.py
For DIFFERENT DEVICES (network):
Step 1: Find Receiver's IP Address
On Windows:
ipconfig
Look for IPv4 Address (e.g., 192.168.1.5)
Step 2: Update sender.py
Change server_ip = "127.0.0.1" to receiver's actual IP (e.g., "192.168.1.5")
Update filepath with your file path using raw string: r"C:\path\to\file.jpg"
Step 3: Start Receiver (Terminal 1)
python receiver.py
Step 4: Run Sender (Terminal 2)
python sender.py
Files are saved in the received_files/ directory on the receiver's machine.