63 lines · 1.4 KB · Python
RawDownload
#! /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 sysfrom socket import * ECHO_PORT = 50000 + 7BUFSIZE = 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()