| #! /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 %r from %r' % (data, 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 %r from %r' % (data, fromaddr) | |
| main() |