0% found this document useful (0 votes)
12 views

Practical Python

The document contains code for implementing Hamming code for error detection. It takes the data bits as input, calculates the number of redundant bits needed based on the length of data, inserts the redundant bits in the codeword by calculating their positions, flips a bit to introduce error, detects and corrects the error by calculating parity of bits in each position.

Uploaded by

Dev Khatanhar
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views

Practical Python

The document contains code for implementing Hamming code for error detection. It takes the data bits as input, calculates the number of redundant bits needed based on the length of data, inserts the redundant bits in the codeword by calculating their positions, flips a bit to introduce error, detects and corrects the error by calculating parity of bits in each position.

Uploaded by

Dev Khatanhar
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

#CRC

def XOR():
global checkValue
result = ''
for j in range(N):
result += '0' if checkValue[j] == genPoly[j]
else '1'
checkValue = result

def receiver():
global data, checkValue, N
receivedData = input("Enter the received data: ")
data = receivedData
print("\n----------------------")
print("Data received:", receivedData)
crc()
i = 0
while i < N - 1 and checkValue[i] != '1':
i += 1
if i < N - 1:
print("\nError detected\n")
else:
print("\nNo error detected\n")

def crc():
global checkValue, data, i, N
checkValue = data
N = len(genPoly)
while i <= dataLength + N - 1:
if checkValue[0] == '1':
XOR()
checkValue = checkValue[1:] + (data[i] if i <
dataLength else '0')
i += 1

if __name__ == '__main__':
data = ""
checkValue = ""
genPoly = ""
dataLength, i, j = 0, 0, 0
N = 0

inputData = input("Enter data to be transmitted: ")


data = inputData
genPolyInput = input("Enter the Generating
polynomial: ")
genPoly = genPolyInput
dataLength = len(inputData)
data += '0' * (len(genPoly) - 1)
N = len(genPoly) # Set N here
print("\n--------------------------------------")
print("Data padded with n-1 zeros:", data)
print("----------------------------------------")
crc()
print("\nCRC or Check value is:",int(checkValue)/10
)
for i in range(dataLength, dataLength + len(genPoly
) - 1):
data = data[:i] + checkValue[i - dataLength] +
data[i + 1:]
print("\n-----------------------")
print("Final data to be sent:", data)
print("--------------------------")
receiver()
#IPv4 Subnet Calculation
def main():
print("Enter IPv4 address(e.g.,192.168.1.10):", end
='')
ipAddress = input()
print("Enter Subnet Mask in CIDR notation(e.g.,24
):", end='')
subnetMask = int(input())
ipParts = ipAddress.split(".")
ipValue = 0
for i in range(4):
ipValue += int(ipParts[i]) << (24 - 8 * i)
subnetMaskValue = (0xFFFFFFFF << (32 - subnetMask
)) & 0xFFFFFFFF
networkAddress = ipValue & subnetMaskValue
broadcastAddress = networkAddress | (~
subnetMaskValue & 0xFFFFFFFF)
availableRangeStart = networkAddress + 1
availableRangeEnd = broadcastAddress - 1

print("Network Address:", formatIPv4(networkAddress


))
print("Broadcast Address:", formatIPv4(
broadcastAddress))
print("Available IP Range:", formatIPv4(
availableRangeStart), "to", formatIPv4(
availableRangeEnd))

def formatIPv4(ipValue):
return "{}.{}.{}.{}".format(
(ipValue >> 24) & 0xFF,
(ipValue >> 16) & 0xFF,
(ipValue >> 8) & 0xFF,
ipValue & 0xFF
)

if __name__ == "__main__":
main()
#Socket Programming Client side (1/2)
import socket
def main():
s = socket.socket(socket.AF_INET, socket.
SOCK_STREAM)
host = "localhost"
port = 3333
s.connect((host, port))

while True:
message = input("Enter Client side message: ")
s.send(message.encode('utf-8'))
if message == "stop":
break

server_response = s.recv(1024).decode('utf-8')
print("Server says:", server_response)

s.close()

if __name__ == "__main__":
main()
#Socket Programming Server side (2/2)
import socket
def main():
ss = socket.socket(socket.AF_INET, socket.
SOCK_STREAM)
host = "localhost"
port = 3333
ss.bind((host, port))
ss.listen(1)

conn, addr = ss.accept()


print("Connection from:", addr)

while True:
client_message = conn.recv(1024).decode('utf-8'
)
print("Client says:", client_message)

server_response = input("Enter Server side


message: ")
conn.send(server_response.encode('utf-8'))
if server_response == "stop":
break

conn.close()
ss.close()

if __name__ == "__main__":
main()
#GO Back N
import random
def transmit_n(start, end):
print("Transmitting Frames:", end=" ")
for i in range(start, end + 1):
print(i, end=" ")
print()
def main():
n = int(input("Enter Size of the Window(n):- "))
total = int(input("Enter total number of frames:- "
))
base = 1
next_seq_num = 1

while base <= total:


transmit_n(base, min(base + n - 1, total))
r = random.randint(0, 1)

if r == 0:
print(f"Acknowledgement for frames {base}
to {next_seq_num} is Received")
base = next_seq_num + 1
next_seq_num = base
else:
print(f"Acknowledgement for frames {base}
to {next_seq_num} is not Received")
print("Revisiting")
next_seq_num = base

print()

if __name__ == "__main__":
main()
#Hamming Code
import math

def print_array(arr):
for num in arr:
print(num, end=' ')
print()

def log2(num):
return int(math.log(num) / math.log(2))

def hamming_code():
n = int(input("Enter number of bits for Hamming
Data: "))
b = [int(x) for x in input("Enter the string: ").
split()]

print("Entered Data:", end=' ')


print_array(b)

r = 0
while True:
if 2 ** r >= r + n + 1:
break
r += 1

print("Redundant bits:", r)

a = [0] * (r + n + 1)
index = 0

for i in range(r + n, 0, -1):


l = log2(i)
if 2 ** l != i:
a[r + n - i] = b[index]
index += 1
else:
a[r + n - i] = -1

for i in range(1, r + n + 1):


l = log2(i)
if 2 ** l == i:
num = i
data_list = []
while True:
for j in range(i):
if num > r + n:
break
data_list.append(num)
num += 1
num += i
if num > r + n:
break
count = 0
for j in range(len(data_list)):
if a[r + n - data_list[j]] == 1:
count += 1
if count % 2 == 0:
a[r + n - i] = 0
else:
a[r + n - i] = 1

print("Generated Code:")
print_array(a)

pos = int(input("Enter position to check for error


detection: "))
index = r + n - pos
a[index] = 1 - a[index]

bit = ""
for i in range(1, r + n + 1):
l = log2(i)
if 2 ** l == i:
num = i
data_list = []
while True:
for j in range(i):
if num > r + n:
break
data_list.append(num)
num += 1
num += i
if num > r + n:
break
count = 0
for j in range(len(data_list)):
if a[r + n - data_list[j]] == 1:
count += 1
if count % 2 == 0:
bit = "0" + bit
else:
bit = "1" + bit

print("Sent Code:", end=' ')


print_array(a)

num = int(bit, 2)
print("Error at position", num)
a[index] = 1 - a[index]

print("Corrected code:", end=' ')


print_array(a)

if __name__ == "__main__":
hamming_code()

You might also like