#! /usr/bin/env python

# Client and server for udp (datagram) echo.
#
# Usage: udpecho -s [port]            (to start a server)
# or:    udpecho -c host [port] <file (client)

import sys
from socket import *

ECHO_PORT = 50000 + 7
BUFSIZE = 1024

def main():
	if len(sys.argv) < 2:
		usage()
	if sys.argv[1] == '-s':
		server()
	elif sys.argv[1] == '-c':
		client()
	else:
		usage()

def usage():
	sys.stdout = sys.stderr
	print 'Usage: udpecho -s [port]            (server)'
	print 'or:    udpecho -c host [port] <file (client)'
	sys.exit(2)

def server():
	if len(sys.argv) > 2:
		port = eval(sys.argv[2])
	else:
		port = ECHO_PORT
	s = socket(AF_INET, SOCK_DGRAM)
	s.bind('', port)
	print 'udp echo server ready'
	while 1:
		data, addr = s.recvfrom(BUFSIZE)
		print 'server received', `data`, 'from', `addr`
		s.sendto(data, addr)

def client():
	if len(sys.argv) < 3:
		usage()
	host = sys.argv[2]
	if len(sys.argv) > 3:
		port = eval(sys.argv[3])
	else:
		port = ECHO_PORT
	addr = host, port
	s = socket(AF_INET, SOCK_DGRAM)
	s.bind('', 0)
	print 'udp echo client ready, reading stdin'
	while 1:
		line = sys.stdin.readline()
		if not line:
			break
		s.sendto(line, addr)
		data, fromaddr = s.recvfrom(BUFSIZE)
		print 'client received', `data`, 'from', `fromaddr`

main()
