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