Fixed issue-number mistake in NEWS update.
[python.git] / Demo / sockets / udpecho.py
blob5181c8283bb1a8265fb5d9a1df48672a3958e667
1 #! /usr/bin/env python
3 # Client and server for udp (datagram) echo.
5 # Usage: udpecho -s [port] (to start a server)
6 # or: udpecho -c host [port] <file (client)
8 import sys
9 from socket import *
11 ECHO_PORT = 50000 + 7
12 BUFSIZE = 1024
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()
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)
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)
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)
63 main()