This Socket Example Program Implements a TCP Socket, UDP Socket, and HTTPClient socket then uses each of these to perform basic I/O.

Dependencies:   JSON M2XStreamClient-JMF WNCInterface mbed-rtos mbed

See the README for details on this example program. NOTE: When started, the program can take up to 40 seconds before it will respond. This delay is the time required for the WNC Data Module to connect with the network.

Committer:
JMF
Date:
Tue Sep 27 20:04:14 2016 +0000
Revision:
2:8fb99c9f5075
Parent:
1:7634d07c4310
Child:
3:5cc9de44aea5
updating how stdio/stderr is initialized, moved out of WNCInterface.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JMF 0:50979ffa39b6 1 /* =====================================================================
JMF 0:50979ffa39b6 2 Copyright © 2016, Avnet (R)
JMF 0:50979ffa39b6 3
JMF 0:50979ffa39b6 4 Contributors:
JMF 0:50979ffa39b6 5 * James M Flynn, www.em.avnet.com
JMF 0:50979ffa39b6 6
JMF 0:50979ffa39b6 7 Licensed under the Apache License, Version 2.0 (the "License");
JMF 0:50979ffa39b6 8 you may not use this file except in compliance with the License.
JMF 0:50979ffa39b6 9 You may obtain a copy of the License at
JMF 0:50979ffa39b6 10
JMF 0:50979ffa39b6 11 http://www.apache.org/licenses/LICENSE-2.0
JMF 0:50979ffa39b6 12
JMF 0:50979ffa39b6 13 Unless required by applicable law or agreed to in writing,
JMF 0:50979ffa39b6 14 software distributed under the License is distributed on an
JMF 0:50979ffa39b6 15 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
JMF 0:50979ffa39b6 16 either express or implied. See the License for the specific
JMF 0:50979ffa39b6 17 language governing permissions and limitations under the License.
JMF 0:50979ffa39b6 18
JMF 0:50979ffa39b6 19 @file WNCInterface.cpp
JMF 0:50979ffa39b6 20 @version 1.0
JMF 0:50979ffa39b6 21 @date Sept 2016
JMF 0:50979ffa39b6 22
JMF 0:50979ffa39b6 23 ======================================================================== */
JMF 0:50979ffa39b6 24
JMF 0:50979ffa39b6 25 #include "mbed.h"
JMF 0:50979ffa39b6 26 #include "WNCInterface.h"
JMF 0:50979ffa39b6 27
JMF 0:50979ffa39b6 28 #include "Socket/Socket.h"
JMF 0:50979ffa39b6 29 #include "Socket/TCPSocketConnection.h"
JMF 0:50979ffa39b6 30 #include "Socket/UDPSocket.h"
JMF 0:50979ffa39b6 31
JMF 0:50979ffa39b6 32 #define DEBUG
JMF 0:50979ffa39b6 33 #define MBED_PLATFORM
JMF 0:50979ffa39b6 34 #include "HTTPClient.h"
JMF 0:50979ffa39b6 35
JMF 0:50979ffa39b6 36 #define CRLF "\n\r"
JMF 0:50979ffa39b6 37
JMF 0:50979ffa39b6 38 #define ntohl(n) ((n & 0xff) << 24) |\
JMF 0:50979ffa39b6 39 ((n & 0xff00) << 8) |\
JMF 0:50979ffa39b6 40 ((n & 0xff0000UL) >> 8) |\
JMF 0:50979ffa39b6 41 ((n & 0xff000000UL) >> 24)
JMF 0:50979ffa39b6 42
JMF 0:50979ffa39b6 43 int main() {
JMF 0:50979ffa39b6 44 int ret;
JMF 0:50979ffa39b6 45 WNCInterface wnc;
JMF 2:8fb99c9f5075 46 MODSERIAL pc(USBTX,USBRX,256,256);
JMF 2:8fb99c9f5075 47
JMF 2:8fb99c9f5075 48 pc.baud(115200);
JMF 0:50979ffa39b6 49 printf("STARTING WNCInterface & Socket Test" CRLF);
JMF 0:50979ffa39b6 50
JMF 0:50979ffa39b6 51 ret = wnc.init();
JMF 0:50979ffa39b6 52 printf("WNC Module %s initialized (%02X)." CRLF, ret?"IS":"IS NOT", ret);
JMF 0:50979ffa39b6 53 if( !ret ) {
JMF 0:50979ffa39b6 54 printf(" - - - - - - - ALL DONE - - - - - - - " CRLF);
JMF 0:50979ffa39b6 55 while(1);
JMF 0:50979ffa39b6 56 }
JMF 0:50979ffa39b6 57
JMF 0:50979ffa39b6 58 ret = wnc.connect();
JMF 0:50979ffa39b6 59 printf("IP Address: %s " CRLF CRLF, wnc.getIPAddress());
JMF 0:50979ffa39b6 60 //
JMF 0:50979ffa39b6 61 //demonstrate a TCP connection
JMF 0:50979ffa39b6 62 //
JMF 0:50979ffa39b6 63 TCPSocketConnection tsock;
JMF 0:50979ffa39b6 64 printf("\n\n\n\n------------------------------------" CRLF "starting TCP Socket Test..." CRLF);
JMF 0:50979ffa39b6 65
JMF 0:50979ffa39b6 66 tsock.connect("mbed.org", 80);
JMF 0:50979ffa39b6 67 printf("Connected!" CRLF );
JMF 0:50979ffa39b6 68 char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
JMF 0:50979ffa39b6 69 ret=tsock.send_all(http_cmd, sizeof(http_cmd)-1);
JMF 0:50979ffa39b6 70 printf("TCP Socket sent %d bytes.\r\n",ret);
JMF 0:50979ffa39b6 71 char buffer[1500];
JMF 0:50979ffa39b6 72
JMF 0:50979ffa39b6 73 tsock.set_blocking (false, 1000);
JMF 0:50979ffa39b6 74 while (ret>0) {
JMF 0:50979ffa39b6 75 ret = tsock.receive(buffer, sizeof(buffer)-1);
JMF 0:50979ffa39b6 76 buffer[ret] = '\0';
JMF 0:50979ffa39b6 77 if( ret > 0 )
JMF 0:50979ffa39b6 78 printf("Received %d chars from server:" CRLF "<----->" CRLF "%s" CRLF
JMF 0:50979ffa39b6 79 "<----->" CRLF, ret, buffer);
JMF 0:50979ffa39b6 80 }
JMF 0:50979ffa39b6 81 tsock.close();
JMF 0:50979ffa39b6 82
JMF 0:50979ffa39b6 83 //
JMF 0:50979ffa39b6 84 //demonstrate a UDP connection
JMF 0:50979ffa39b6 85 //
JMF 0:50979ffa39b6 86 printf("\n\n\n\n-------------------------------------" CRLF);
JMF 0:50979ffa39b6 87 printf( "starting UDP Socket Test..." CRLF);
JMF 0:50979ffa39b6 88
JMF 0:50979ffa39b6 89 //#define UDP_URL "utcnist.colorado.edu"
JMF 0:50979ffa39b6 90 //#define UDP_PORT 37
JMF 0:50979ffa39b6 91 #define UDP_URL "pool.ntp.org"
JMF 0:50979ffa39b6 92 #define UDP_PORT 123
JMF 0:50979ffa39b6 93
JMF 0:50979ffa39b6 94 UDPSocket usock;
JMF 0:50979ffa39b6 95 usock.init();
JMF 0:50979ffa39b6 96 Endpoint nist;
JMF 0:50979ffa39b6 97
JMF 0:50979ffa39b6 98 nist.set_address(UDP_URL, UDP_PORT);
JMF 0:50979ffa39b6 99 printf("Endpoing set to '%s'/%s/%d, try sending data." CRLF,
JMF 0:50979ffa39b6 100 UDP_URL, nist.get_address(), nist.get_port());
JMF 0:50979ffa39b6 101
JMF 0:50979ffa39b6 102 // char out_buffer[] = "plop"; // Does not matter
JMF 0:50979ffa39b6 103
JMF 0:50979ffa39b6 104 char out_buffer[48];
JMF 0:50979ffa39b6 105 out_buffer[0] = 0xE3; // LI, Version, Mode
JMF 0:50979ffa39b6 106 out_buffer[1] = 0; // Stratum, or type of clock
JMF 0:50979ffa39b6 107 out_buffer[2] = 6; // Polling Interval
JMF 0:50979ffa39b6 108 out_buffer[3] = 0xEC; // Peer Clock Precision
JMF 0:50979ffa39b6 109 // 8 bytes of zero for Root Delay & Root Dispersion
JMF 0:50979ffa39b6 110 out_buffer[12] = 49;
JMF 0:50979ffa39b6 111 out_buffer[13] = 0x4E;
JMF 0:50979ffa39b6 112 out_buffer[14] = 49;
JMF 0:50979ffa39b6 113 out_buffer[15] = 52;
JMF 0:50979ffa39b6 114
JMF 0:50979ffa39b6 115 ret = usock.sendTo(nist, out_buffer, sizeof(out_buffer));
JMF 0:50979ffa39b6 116 printf("sent buffer to UDP IP/Port (ret=%d)" CRLF "Now try receiving." CRLF,ret);
JMF 0:50979ffa39b6 117
JMF 0:50979ffa39b6 118
JMF 1:7634d07c4310 119 usock.set_blocking (false, 1000);
JMF 0:50979ffa39b6 120 char in_buffer[50];
JMF 0:50979ffa39b6 121 int n = usock.receiveFrom(nist, in_buffer, sizeof(in_buffer));
JMF 0:50979ffa39b6 122
JMF 0:50979ffa39b6 123 printf("Received %d bytes via UDP IP address %s on port %d." CRLF,
JMF 0:50979ffa39b6 124 n, nist.get_address(), nist.get_port());
JMF 0:50979ffa39b6 125
JMF 0:50979ffa39b6 126 usock.close();
JMF 0:50979ffa39b6 127
JMF 0:50979ffa39b6 128 //
JMF 0:50979ffa39b6 129 //demonstrate HTTPClient operations
JMF 0:50979ffa39b6 130 //
JMF 0:50979ffa39b6 131 HTTPClient http;
JMF 0:50979ffa39b6 132 char str[512];
JMF 0:50979ffa39b6 133
JMF 0:50979ffa39b6 134 printf("\n\n\n\n-------------------------------------" CRLF);
JMF 0:50979ffa39b6 135 printf( "starting HTTPClient Socket Test..." CRLF);
JMF 0:50979ffa39b6 136
JMF 0:50979ffa39b6 137 //GET data
JMF 0:50979ffa39b6 138 printf(">>>>Fetch a page..." CRLF);
JMF 0:50979ffa39b6 139
JMF 0:50979ffa39b6 140 ret = http.get("http://developer.mbed.org/media/uploads/mbed_official/hello.txt", str, strlen(str));
JMF 0:50979ffa39b6 141 if (!ret)
JMF 0:50979ffa39b6 142 {
JMF 0:50979ffa39b6 143 printf("Page fetched successfully - read %d characters" CRLF, strlen(str));
JMF 0:50979ffa39b6 144 printf("<----->" CRLF "Result: %s" CRLF "<----->" CRLF, str);
JMF 0:50979ffa39b6 145 }
JMF 0:50979ffa39b6 146 else
JMF 0:50979ffa39b6 147 {
JMF 0:50979ffa39b6 148 printf("Error - ret = %d - HTTP return code = %d" CRLF, ret, http.getHTTPResponseCode());
JMF 0:50979ffa39b6 149 }
JMF 0:50979ffa39b6 150
JMF 0:50979ffa39b6 151 //POST data
JMF 0:50979ffa39b6 152 HTTPMap map;
JMF 0:50979ffa39b6 153 HTTPText inText(str, 512);
JMF 0:50979ffa39b6 154 map.put("Hello", "World");
JMF 0:50979ffa39b6 155 map.put("test", "1234");
JMF 0:50979ffa39b6 156
JMF 0:50979ffa39b6 157 printf(CRLF CRLF ">>>>Post data..." CRLF);
JMF 0:50979ffa39b6 158 ret = http.post("http://httpbin.org/post", map, &inText);
JMF 0:50979ffa39b6 159 if (!ret)
JMF 0:50979ffa39b6 160 {
JMF 0:50979ffa39b6 161 printf("Executed POST successfully - read %d characters" CRLF, strlen(str));
JMF 0:50979ffa39b6 162 printf("<----->" CRLF );
JMF 0:50979ffa39b6 163 printf("Result: %s" CRLF "<----->" CRLF, str);
JMF 0:50979ffa39b6 164 }
JMF 0:50979ffa39b6 165 else
JMF 0:50979ffa39b6 166 {
JMF 0:50979ffa39b6 167 printf("Error - ret = %d - HTTP return code = %d" CRLF, ret, http.getHTTPResponseCode());
JMF 0:50979ffa39b6 168 }
JMF 0:50979ffa39b6 169
JMF 0:50979ffa39b6 170 //PUT data
JMF 0:50979ffa39b6 171 strcpy(str, "This is a PUT test!");
JMF 0:50979ffa39b6 172 HTTPText outText(str);
JMF 0:50979ffa39b6 173 printf(CRLF CRLF ">>>>Put data..." CRLF);
JMF 0:50979ffa39b6 174 ret = http.put("http://httpbin.org/put", outText, &inText);
JMF 0:50979ffa39b6 175 if (!ret)
JMF 0:50979ffa39b6 176 {
JMF 0:50979ffa39b6 177 printf("Executed PUT successfully - read %d characters" CRLF, strlen(str));
JMF 0:50979ffa39b6 178 printf("<----->" CRLF );
JMF 0:50979ffa39b6 179 printf("Result: %s" CRLF "<----->" CRLF, str);
JMF 0:50979ffa39b6 180 }
JMF 0:50979ffa39b6 181 else
JMF 0:50979ffa39b6 182 {
JMF 0:50979ffa39b6 183 printf("Error - ret = %d - HTTP return code = %d" CRLF, ret, http.getHTTPResponseCode());
JMF 0:50979ffa39b6 184 }
JMF 0:50979ffa39b6 185
JMF 0:50979ffa39b6 186 //DELETE data
JMF 0:50979ffa39b6 187 printf(CRLF CRLF ">>>>Delete data..." CRLF);
JMF 0:50979ffa39b6 188 ret = http.del("http://httpbin.org/delete", &inText);
JMF 0:50979ffa39b6 189 if (!ret)
JMF 0:50979ffa39b6 190 {
JMF 0:50979ffa39b6 191 printf("Executed DELETE successfully - read %d characters" CRLF, strlen(str));
JMF 0:50979ffa39b6 192 printf("<----->" CRLF );
JMF 0:50979ffa39b6 193 printf("Result: %s" CRLF "<----->" CRLF, str);
JMF 0:50979ffa39b6 194 }
JMF 0:50979ffa39b6 195 else
JMF 0:50979ffa39b6 196 {
JMF 0:50979ffa39b6 197 printf("Error - ret = %d - HTTP return code = %d" CRLF, ret, http.getHTTPResponseCode());
JMF 0:50979ffa39b6 198 }
JMF 0:50979ffa39b6 199
JMF 0:50979ffa39b6 200 wnc.disconnect();
JMF 0:50979ffa39b6 201 printf(" - - - - - - - ALL DONE - - - - - - - " CRLF);
JMF 0:50979ffa39b6 202 while(1) {}
JMF 0:50979ffa39b6 203 }
JMF 0:50979ffa39b6 204