Tests for the NetworkSocketAPI
Dependents: BSDInterfaceTests ESP8266InterfaceTests LWIPInterfaceTests SpwfInterface_NSAPI_Tests ... more
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:]) |