mbed TCP connectivity program

Committer:
davyu
Date:
Tue Nov 14 05:57:19 2017 +0000
Revision:
0:a254c66d6be2
Initial test program

Who changed what in which revision?

UserRevisionLine numberNew 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 }