Code 3
#crc.py
def c(d,g):
d+='0'*(len(g)-1)
D,G=list(d),list(g)
for i in range(len(D)-len(G)+1):
if D[i]=='1':
for j in range(len(G)):
D[i+j]=str(int(D[i+j])^int(G[j]))
return ''.join(D[-(len(G)-1):])
#server.py
import socket
from crc import c
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('localhost',6000))
print("Server listening on 6000...")
while True:
data,addr=s.recvfrom(1024)
m,cs=data.decode().split(',')
if m.lower()=='exit':
print("Client exit, shutting down.")
break
g=input("Enter generator (binary): ")
cc=c(m+cs,g)
print("Received message(CRC):",m+cs)
print("Received checksum:",cs)
print(f"Data from {addr} is {'valid' if all(i=='0' for i in cc) else 'invalid'}.")
s.close()
#client.py
import socket
from crc import c
while True:
m=input("Enter message (binary) or 'exit': ")
if m.lower()=='exit':
with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as x:
x.sendto("exit,exit".encode(),('localhost',6000))
print("Exiting client.")
break
g=input("Enter generator (binary): ")
cs=c(m,g)
print("Checksum code:",cs)
with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as x:
x.sendto(f"{m},{cs}".encode(),('localhost',6000))