Paul Staron
/
TCP-NTP-Server
TCP, NTP and server Ethernet and WI-FI example working on OS5.15
main.cpp
- Committer:
- star297
- Date:
- 2020-03-08
- Revision:
- 3:91523db40ebd
- Parent:
- 2:06cbf3f53592
- Child:
- 5:3ef245bbc6ef
File content as of revision 3:91523db40ebd:
#include "mbed.h" #include "NetworkInterface.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 NetworkInterface *net = NetworkInterface::get_default_instance(); NTPclient ntp(*net); DigitalOut led(LED1); time_t seconds; char *sendbuffer = new char[512]; // create data send buffer space char recevbuffer[1024]; // create http receive buffer space int main() { printf("\033[0m\033[2J\033[HTCP NTP client and server example\r\n\n\n"); // Tera Term clear screen seconds = time(NULL); printf("Initial RTC time: %s\r\n", ctime(&seconds)); // Include to set static IP int net_static = net->set_network((SocketAddress)IP,(SocketAddress)NETMASK,(SocketAddress)GATEWAY); printf("Connecting to network...\n\n"); if (!net) { printf("No network interface found, select an interface in 'mbed_app.json'\n"); return NULL; } nsapi_error_t connect_status = net->connect(); if (connect_status != NSAPI_ERROR_OK) { printf("Failed to connect to network (%d)\n", connect_status); return NULL; } SocketAddress net_addr; net->get_ip_address(&net_addr); printf("IP address: %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None"); net->get_netmask(&net_addr); printf("Netmask: %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None"); net->get_gateway(&net_addr); printf("Gateway: %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None"); printf("MAC: %s\n", net->get_mac_address()); net->get_ip_address(&net_addr); const char *ip = net_addr.get_ip_address(); if(ip){ printf("\nConnected\n\nGet NTP time...\n"); if(ntp.getNTP("0.pool.ntp.org",0,1,1)){ seconds = time(NULL); printf("RTC 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(net); // Bind the HTTP port (TCP 80) to the server srv.bind(80); //Can handle x simultaneous connections srv.listen(5); printf("The Server IP address: '%s'\n", ip); printf("Waiting for connection....\r\n\n"); while(1){ client_sock = srv.accept(); //return pointer of a client socket led=1; client_sock->recv(recevbuffer, 1024); // 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(); led=0; } }