#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()