Paul Staron
/
TCP-NTP-Server
TCP, NTP and server Ethernet and WI-FI example working on OS5.15
Diff: main.cpp
- Revision:
- 0:d2e1b817924d
- Child:
- 2:06cbf3f53592
diff -r 000000000000 -r d2e1b817924d main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Feb 28 16:10:25 2020 +0000 @@ -0,0 +1,142 @@ +#include "mbed.h" +#include "EthernetInterface.h" +#include "NTPclient.h" + +#define IP "192.168.1.180" +#define GATEWAY "192.168.1.1" +#define NETMASK "255.255.255.0" +#define PORT 80 + +// set required stdio buad rate in mbed_app.json. eg,"platform.stdio-baud-rate": 115200 + +EthernetInterface net; +NTPclient ntp(net); + +DigitalOut led(LED1); + +char *sendbuffer = new char[512]; // create data send buffer space + +int main() +{ + led=0; + + printf("\033[0m\033[2J\033[HTCP NTP client and server example\r\n\n\n"); // Tera Term clear screen + + time_t seconds = time(NULL); + printf("Initial RTC time: %s\r\n", ctime(&seconds)); + + EthernetInterface eth; + + eth.set_network (IP, NETMASK, GATEWAY); // include to set network connection with static parameters. + + eth.connect(); + + const char *ip = eth.get_ip_address(); + if(ip){ + printf("Connected\n\nGet NTP time...\n"); + if(ntp.setTime("0.pool.ntp.org",123,3000)==0){ + time_t seconds = time(NULL); + printf("System time set by NTP: %s\n\n", ctime(&seconds)); + } + else{printf("No NTP could not set RTC !!\n\n");} + }else{ + printf("No IP!!\n"); + while(1); + } + + TCPSocket srv; + TCPSocket *client_sock; // srv.accept() will return pointer to socket + SocketAddress client_addr; + + // Open the server on ethernet stack + srv.open(ð); + // Bind the HTTP port (TCP 80) to the server + srv.bind(eth.get_ip_address(), PORT); + //Can handle x simultaneous connections + srv.listen(1); + + printf("The Server IP address: '%s'\n", ip); + printf("Waiting for connection....\r\n\n"); + + + led=1; + + while(1){ + client_sock = srv.accept(); //return pointer of a client socket + char *recevbuffer = new char[256]; // create 'clean' http receive buffer space + client_sock->recv(recevbuffer, 256); // set size of required receive data length + client_sock->getpeername(&client_addr); //this will fill address of client to the SocketAddress object + printf("Accepted %s:%d\n\n", client_addr.get_ip_address(), client_addr.get_port()); + printf("Received Msg:\n%s\n\n", recevbuffer); + time_t seconds = time(NULL); //get current mcu rtc time + sprintf(sendbuffer,"HTTP/1.1 200 OK\n Content-type: text/plain\r\n\r\n <h1> Hello !!</h1>\r\n\n <h1>Time is: %s</h1>\r\n", ctime(&seconds)); + client_sock->send(sendbuffer, strlen(sendbuffer)); // send data in buffer to http port. + client_sock->close(); + delete[] recevbuffer; // delete http buffer + } + +} + + + +/* + + +int main(void) { + + printf("\033[0m\033[2J\033[HInitialise!\r\n\n\n"); // Tera Term clear screen + + time_t seconds = time(NULL); + printf("Starting time: %s\r\n", ctime(&seconds)); + + printf("EthernetInterface connecting...\n\n"); + + net.set_network (IP, NETMASK, GATEWAY); // include to set network connection with static parameters. + net.connect(); + + const char *ip = net.get_ip_address(); + if(ip){ + printf("Connected\nIP: %s\nGet NTP...\n", ip); + if(ntp.setTime("0.pool.ntp.org",123,3000)==0){ + time_t seconds = time(NULL); + printf("System time set by NTP: %s\n\n", ctime(&seconds)); + } + else{printf("No NTP could not set RTC !!\n\n");} + }else{ + printf("No IP!!\n"); + while(1); + } + + // Show the network address + printf("Server IP: %s:\n", net.get_ip_address()); + printf("Netmask: %s\n", net.get_netmask()); + printf("Gateway: %s\n\n", net.get_gateway()); + + printf("Starting Server...\r\n\n"); + + // Open the server on ethernet stack + server.open(&net); + // Bind the HTTP port to the server + server.bind(ip, PORT); + // Can handle 5 simultaneous connections + server.listen(5); + //listening for http GET request + + printf("Ready \r\nWaiting for connection....\r\n\n"); + + led=1; + while(1){ + led=1; + server.accept(&client, &clientAddress); + led=0; + client.recv(receiveBuf, 1024); + //printf("\033[0m\033[2J\033[HClient IP: %s\r\n\n%s\r\n",clientAddress.get_ip_address(),receiveBuf); + printf("Client IP: %s\r\n\n%s\r\n",clientAddress.get_ip_address(),receiveBuf); + time_t seconds = time(NULL); + sprintf(buffer,"HTTP/1.1 200 OK\n Content-type: text/plain\r\n\r\n <h1> Hello !!</h1>\r\n\n <h1>Time is: %s</h1>\r\n", ctime(&seconds)); + client.send(buffer, strlen(buffer)); + client.close(); + } +} + +*/ \ No newline at end of file