Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of NSAPITests by
NSAPITestServer.py@3:8b595ee6219d, 2016-03-02 (annotated)
- Committer:
- Brian Daniels
- Date:
- Wed Mar 02 16:16:25 2016 -0600
- Revision:
- 3:8b595ee6219d
- Parent:
- 1:796ba8b082b1
Adding socket tests
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Christopher Haster |
1:796ba8b082b1 | 1 | #!/usr/bin/env python |
| Brian Daniels |
3:8b595ee6219d | 2 | import socket |
| Brian Daniels |
3:8b595ee6219d | 3 | import signal |
| Brian Daniels |
3:8b595ee6219d | 4 | import sys |
| Brian Daniels |
3:8b595ee6219d | 5 | |
| Brian Daniels |
3:8b595ee6219d | 6 | runServer = True |
| Brian Daniels |
3:8b595ee6219d | 7 | |
| Brian Daniels |
3:8b595ee6219d | 8 | def signal_handler(signal, frame): |
| Brian Daniels |
3:8b595ee6219d | 9 | global runServer |
| Brian Daniels |
3:8b595ee6219d | 10 | |
| Brian Daniels |
3:8b595ee6219d | 11 | print "Handling interrupt" |
| Brian Daniels |
3:8b595ee6219d | 12 | runServer = False |
| Brian Daniels |
3:8b595ee6219d | 13 | |
| Brian Daniels |
3:8b595ee6219d | 14 | def handle_recv(message) : |
| Brian Daniels |
3:8b595ee6219d | 15 | if message == "{{start}}": |
| Brian Daniels |
3:8b595ee6219d | 16 | return None |
| Brian Daniels |
3:8b595ee6219d | 17 | else: |
| Brian Daniels |
3:8b595ee6219d | 18 | return message |
| Brian Daniels |
3:8b595ee6219d | 19 | |
| Brian Daniels |
3:8b595ee6219d | 20 | |
| Brian Daniels |
3:8b595ee6219d | 21 | def run_tcp_server(port): |
| Brian Daniels |
3:8b595ee6219d | 22 | global runServer |
| Brian Daniels |
3:8b595ee6219d | 23 | |
| Brian Daniels |
3:8b595ee6219d | 24 | host = 'localhost' |
| Brian Daniels |
3:8b595ee6219d | 25 | backlog = 5 |
| Brian Daniels |
3:8b595ee6219d | 26 | size = 1024 |
| Brian Daniels |
3:8b595ee6219d | 27 | tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| Brian Daniels |
3:8b595ee6219d | 28 | tcp_socket.settimeout(1.0) |
| Brian Daniels |
3:8b595ee6219d | 29 | tcp_socket.bind((host,port)) |
| Brian Daniels |
3:8b595ee6219d | 30 | tcp_socket.listen(backlog) |
| Brian Daniels |
3:8b595ee6219d | 31 | |
| Brian Daniels |
3:8b595ee6219d | 32 | while runServer: |
| Brian Daniels |
3:8b595ee6219d | 33 | try: |
| Brian Daniels |
3:8b595ee6219d | 34 | client, address = tcp_socket.accept() |
| Brian Daniels |
3:8b595ee6219d | 35 | data = client.recv(size) |
| Brian Daniels |
3:8b595ee6219d | 36 | if data: |
| Brian Daniels |
3:8b595ee6219d | 37 | print "TCP DATA from %s: %s" % (address, data) |
| Brian Daniels |
3:8b595ee6219d | 38 | message = handle_recv(data) |
| Brian Daniels |
3:8b595ee6219d | 39 | if message: |
| Brian Daniels |
3:8b595ee6219d | 40 | client.send(message) |
| Brian Daniels |
3:8b595ee6219d | 41 | client.close() |
| Brian Daniels |
3:8b595ee6219d | 42 | except socket.timeout: |
| Brian Daniels |
3:8b595ee6219d | 43 | pass |
| Brian Daniels |
3:8b595ee6219d | 44 | except IOError: |
| Brian Daniels |
3:8b595ee6219d | 45 | pass |
| Christopher Haster |
1:796ba8b082b1 | 46 | |
| Brian Daniels |
3:8b595ee6219d | 47 | |
| Brian Daniels |
3:8b595ee6219d | 48 | def run_udp_server(port): |
| Brian Daniels |
3:8b595ee6219d | 49 | global runServer |
| Brian Daniels |
3:8b595ee6219d | 50 | |
| Brian Daniels |
3:8b595ee6219d | 51 | host = 'localhost' |
| Brian Daniels |
3:8b595ee6219d | 52 | backlog = 5 |
| Brian Daniels |
3:8b595ee6219d | 53 | size = 1024 |
| Brian Daniels |
3:8b595ee6219d | 54 | udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
| Brian Daniels |
3:8b595ee6219d | 55 | udp_socket.settimeout(1.0) |
| Brian Daniels |
3:8b595ee6219d | 56 | udp_socket.bind((host,port)) |
| Brian Daniels |
3:8b595ee6219d | 57 | |
| Christopher Haster |
1:796ba8b082b1 | 58 | |
| Brian Daniels |
3:8b595ee6219d | 59 | while runServer: |
| Brian Daniels |
3:8b595ee6219d | 60 | try: |
| Brian Daniels |
3:8b595ee6219d | 61 | data, address = udp_socket.recvfrom(size) |
| Brian Daniels |
3:8b595ee6219d | 62 | if data: |
| Brian Daniels |
3:8b595ee6219d | 63 | print "UDP DATA from %s: %s" % (addr, data) |
| Brian Daniels |
3:8b595ee6219d | 64 | message = handle_recv(data) |
| Brian Daniels |
3:8b595ee6219d | 65 | if message: |
| Brian Daniels |
3:8b595ee6219d | 66 | udp_socket.sendto(message, address) |
| Brian Daniels |
3:8b595ee6219d | 67 | except socket.timeout: |
| Brian Daniels |
3:8b595ee6219d | 68 | pass |
| Brian Daniels |
3:8b595ee6219d | 69 | except IOError: |
| Brian Daniels |
3:8b595ee6219d | 70 | pass |
| Brian Daniels |
3:8b595ee6219d | 71 | |
| Brian Daniels |
3:8b595ee6219d | 72 | |
| Brian Daniels |
3:8b595ee6219d | 73 | def main(arguments): |
| Brian Daniels |
3:8b595ee6219d | 74 | global thread_stop_event |
| Brian Daniels |
3:8b595ee6219d | 75 | |
| Brian Daniels |
3:8b595ee6219d | 76 | signal.signal(signal.SIGINT, signal_handler) |
| Brian Daniels |
3:8b595ee6219d | 77 | |
| Brian Daniels |
3:8b595ee6219d | 78 | socket_type = arguments[0] |
| Brian Daniels |
3:8b595ee6219d | 79 | port = int(arguments[1]) |
| Brian Daniels |
3:8b595ee6219d | 80 | |
| Brian Daniels |
3:8b595ee6219d | 81 | if socket_type == "TCP": |
| Brian Daniels |
3:8b595ee6219d | 82 | run_tcp_server(port) |
| Brian Daniels |
3:8b595ee6219d | 83 | elif socket_type == "UDP": |
| Brian Daniels |
3:8b595ee6219d | 84 | run_udp_server(port) |
| Brian Daniels |
3:8b595ee6219d | 85 | else: |
| Brian Daniels |
3:8b595ee6219d | 86 | print "Invalid socket type, must be 'TCP' or 'UDP'" |
| Brian Daniels |
3:8b595ee6219d | 87 | sys.exit(1) |
| Brian Daniels |
3:8b595ee6219d | 88 | |
| Brian Daniels |
3:8b595ee6219d | 89 | sys.exit(0) |
| Brian Daniels |
3:8b595ee6219d | 90 | |
| Brian Daniels |
3:8b595ee6219d | 91 | if __name__ == "__main__": |
| Brian Daniels |
3:8b595ee6219d | 92 | main(sys.argv[1:]) |
