import argparse
import socket
from datetime import datetime
maxbyte=65535

def server(port):
    sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    sock.bind(('127.0.0.1',port))
    print('Listining at {}'.format(sock.getsockname()))
    while True:
        data,address=sock.recvfrom(maxbyte)
        text=data.decode('ascii')
        print('the client at {} says {}'.format(address,text))
        data=text.encode('ascii')
        sock.sendto(data,address)
def client(port):
    sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    text='the time is {}'.format(datetime.now())
    data=text.encode('ascii')
    sock.sendto(data,('127.0.0.1',port))
    print('Client is assigned to the address {}'.format(sock.getsockname()))
    data,address=sock.recvfrom(maxbyte)
    text=data.decode('ascii')
    print('the server {} replied {}'.format(address,text))
def main():
    choices={'client':client,'server':server}
    parser=argparse.ArgumentParser(description='udp communication example')
    parser.add_argument('role',choices=choices,help='which role to play')
    parser.add_argument('-p',metavar='PORT',type=int,default=1060,help='UDP port(default 1060)')
    args=parser.parse_args()
    function=choices[args.role]
    function(args.p)
    
main()