Home | History | Annotate | Download | only in sockets
      1 #! /usr/bin/env python
      2 
      3 # Client and server for udp (datagram) echo.
      4 #
      5 # Usage: udpecho -s [port]            (to start a server)
      6 # or:    udpecho -c host [port] <file (client)
      7 
      8 import sys
      9 from socket import *
     10 
     11 ECHO_PORT = 50000 + 7
     12 BUFSIZE = 1024
     13 
     14 def main():
     15     if len(sys.argv) < 2:
     16         usage()
     17     if sys.argv[1] == '-s':
     18         server()
     19     elif sys.argv[1] == '-c':
     20         client()
     21     else:
     22         usage()
     23 
     24 def usage():
     25     sys.stdout = sys.stderr
     26     print 'Usage: udpecho -s [port]            (server)'
     27     print 'or:    udpecho -c host [port] <file (client)'
     28     sys.exit(2)
     29 
     30 def server():
     31     if len(sys.argv) > 2:
     32         port = eval(sys.argv[2])
     33     else:
     34         port = ECHO_PORT
     35     s = socket(AF_INET, SOCK_DGRAM)
     36     s.bind(('', port))
     37     print 'udp echo server ready'
     38     while 1:
     39         data, addr = s.recvfrom(BUFSIZE)
     40         print 'server received %r from %r' % (data, addr)
     41         s.sendto(data, addr)
     42 
     43 def client():
     44     if len(sys.argv) < 3:
     45         usage()
     46     host = sys.argv[2]
     47     if len(sys.argv) > 3:
     48         port = eval(sys.argv[3])
     49     else:
     50         port = ECHO_PORT
     51     addr = host, port
     52     s = socket(AF_INET, SOCK_DGRAM)
     53     s.bind(('', 0))
     54     print 'udp echo client ready, reading stdin'
     55     while 1:
     56         line = sys.stdin.readline()
     57         if not line:
     58             break
     59         s.sendto(line, addr)
     60         data, fromaddr = s.recvfrom(BUFSIZE)
     61         print 'client received %r from %r' % (data, fromaddr)
     62 
     63 main()
     64