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