Avnet_IoT
/
NuMaker-mbed-tcp
mbed TCP connectivity program
main.cpp@0:a254c66d6be2, 2017-11-14 (annotated)
- Committer:
- davyu
- Date:
- Tue Nov 14 05:57:19 2017 +0000
- Revision:
- 0:a254c66d6be2
Initial test program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
davyu | 0:a254c66d6be2 | 1 | #include "mbed.h" |
davyu | 0:a254c66d6be2 | 2 | #include "EthernetInterface.h" |
davyu | 0:a254c66d6be2 | 3 | |
davyu | 0:a254c66d6be2 | 4 | // Network interface |
davyu | 0:a254c66d6be2 | 5 | EthernetInterface net; |
davyu | 0:a254c66d6be2 | 6 | |
davyu | 0:a254c66d6be2 | 7 | // Socket demo |
davyu | 0:a254c66d6be2 | 8 | int main() { |
davyu | 0:a254c66d6be2 | 9 | // Bring up the ethernet interface |
davyu | 0:a254c66d6be2 | 10 | printf("Ethernet socket example\n"); |
davyu | 0:a254c66d6be2 | 11 | net.connect(); |
davyu | 0:a254c66d6be2 | 12 | |
davyu | 0:a254c66d6be2 | 13 | // Show the network address |
davyu | 0:a254c66d6be2 | 14 | const char *ip = net.get_ip_address(); |
davyu | 0:a254c66d6be2 | 15 | const char *netmask = net.get_netmask(); |
davyu | 0:a254c66d6be2 | 16 | const char *gateway = net.get_gateway(); |
davyu | 0:a254c66d6be2 | 17 | printf("IP address: %s\n", ip ? ip : "None"); |
davyu | 0:a254c66d6be2 | 18 | printf("Netmask: %s\n", netmask ? netmask : "None"); |
davyu | 0:a254c66d6be2 | 19 | printf("Gateway: %s\n", gateway ? gateway : "None"); |
davyu | 0:a254c66d6be2 | 20 | |
davyu | 0:a254c66d6be2 | 21 | // Open a socket on the network interface, and create a TCP connection to mbed.org |
davyu | 0:a254c66d6be2 | 22 | TCPSocket socket; |
davyu | 0:a254c66d6be2 | 23 | socket.open(&net); |
davyu | 0:a254c66d6be2 | 24 | socket.connect("api.ipify.org", 80); |
davyu | 0:a254c66d6be2 | 25 | char *buffer = new char[256]; |
davyu | 0:a254c66d6be2 | 26 | |
davyu | 0:a254c66d6be2 | 27 | // Send an HTTP request |
davyu | 0:a254c66d6be2 | 28 | strcpy(buffer, "GET / HTTP/1.1\r\nHost: api.ipify.org\r\n\r\n"); |
davyu | 0:a254c66d6be2 | 29 | int scount = socket.send(buffer, strlen(buffer)); |
davyu | 0:a254c66d6be2 | 30 | printf("sent %d [%.*s]\n", scount, strstr(buffer, "\r\n")-buffer, buffer); |
davyu | 0:a254c66d6be2 | 31 | |
davyu | 0:a254c66d6be2 | 32 | // Recieve an HTTP response and print out the response line |
davyu | 0:a254c66d6be2 | 33 | int rcount = socket.recv(buffer, 256); |
davyu | 0:a254c66d6be2 | 34 | printf("recv %d [%.*s]\n", rcount, strstr(buffer, "\r\n")-buffer, buffer); |
davyu | 0:a254c66d6be2 | 35 | |
davyu | 0:a254c66d6be2 | 36 | // The api.ipify.org service also gives us the device's external IP address |
davyu | 0:a254c66d6be2 | 37 | const char *payload = strstr(buffer, "\r\n\r\n")+4; |
davyu | 0:a254c66d6be2 | 38 | printf("External IP address: %.*s\n", rcount-(payload-buffer), payload); |
davyu | 0:a254c66d6be2 | 39 | |
davyu | 0:a254c66d6be2 | 40 | // Close the socket to return its memory and bring down the network interface |
davyu | 0:a254c66d6be2 | 41 | socket.close(); |
davyu | 0:a254c66d6be2 | 42 | delete[] buffer; |
davyu | 0:a254c66d6be2 | 43 | |
davyu | 0:a254c66d6be2 | 44 | // Bring down the ethernet interface |
davyu | 0:a254c66d6be2 | 45 | net.disconnect(); |
davyu | 0:a254c66d6be2 | 46 | printf("Done\n"); |
davyu | 0:a254c66d6be2 | 47 | } |