home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyos2bin.zip / Demo / sockets / udpecho.py < prev    next >
Text File  |  1996-11-27  |  1KB  |  64 lines

  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', `data`, 'from', `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', `data`, 'from', `fromaddr`
  62.  
  63. main()
  64.