blob: 9966fd86a4bb524cad520ed40aaa9456c4f2b8ca [file] [log] [blame]
Guido van Rossumf06ee5f1996-11-27 19:52:01 +00001#! /usr/bin/env python
Guido van Rossum22825e81991-07-01 18:32:32 +00002
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
8import sys
9from socket import *
10
11ECHO_PORT = 50000 + 7
12BUFSIZE = 1024
13
14def main():
Tim Peterse6ddc8b2004-07-18 05:56:09 +000015 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()
Guido van Rossum22825e81991-07-01 18:32:32 +000023
24def usage():
Tim Peterse6ddc8b2004-07-18 05:56:09 +000025 sys.stdout = sys.stderr
Collin Winter6f2df4d2007-07-17 20:59:35 +000026 print('Usage: udpecho -s [port] (server)')
27 print('or: udpecho -c host [port] <file (client)')
Tim Peterse6ddc8b2004-07-18 05:56:09 +000028 sys.exit(2)
Guido van Rossum22825e81991-07-01 18:32:32 +000029
30def server():
Tim Peterse6ddc8b2004-07-18 05:56:09 +000031 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))
Collin Winter6f2df4d2007-07-17 20:59:35 +000037 print('udp echo server ready')
Tim Peterse6ddc8b2004-07-18 05:56:09 +000038 while 1:
39 data, addr = s.recvfrom(BUFSIZE)
Collin Winter6f2df4d2007-07-17 20:59:35 +000040 print('server received %r from %r' % (data, addr))
Tim Peterse6ddc8b2004-07-18 05:56:09 +000041 s.sendto(data, addr)
Guido van Rossum22825e81991-07-01 18:32:32 +000042
43def client():
Tim Peterse6ddc8b2004-07-18 05:56:09 +000044 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))
Collin Winter6f2df4d2007-07-17 20:59:35 +000054 print('udp echo client ready, reading stdin')
Tim Peterse6ddc8b2004-07-18 05:56:09 +000055 while 1:
56 line = sys.stdin.readline()
57 if not line:
58 break
Benjamin Peterson06fd5f82008-11-08 17:24:34 +000059 print('addr = ', addr)
60 s.sendto(bytes(line, 'ascii'), addr)
Tim Peterse6ddc8b2004-07-18 05:56:09 +000061 data, fromaddr = s.recvfrom(BUFSIZE)
Collin Winter6f2df4d2007-07-17 20:59:35 +000062 print('client received %r from %r' % (data, fromaddr))
Guido van Rossum22825e81991-07-01 18:32:32 +000063
64main()