equal
deleted
inserted
replaced
|
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() |