Paul Staron
/
TCP-NTP-Server
TCP, NTP and server Ethernet and WI-FI example working on OS5.15
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "NTPclient.h" 00003 #include "favicon_ico.h" 00004 00005 // define static IP settings 00006 #define IP "192.168.1.180" 00007 #define GATEWAY "192.168.1.1" 00008 #define NETMASK "255.255.255.0" 00009 #define PORT 80 00010 00011 NetworkInterface *net = NetworkInterface::get_default_instance(); 00012 NTPclient ntp(*net); 00013 00014 DigitalOut led(LED1); 00015 time_t seconds; 00016 00017 char requestType[16]; 00018 char request[64]; 00019 00020 char *sendbuffer = new char[512]; // create data send buffer space 00021 char recevbuffer[1024]; // create http receive buffer space 00022 00023 int main() 00024 { 00025 printf("\033[0m\033[2J\033[HTCP NTP client and server example\r\n\n\n"); // Tera Term clear screen 00026 seconds = time(NULL); 00027 printf("Initial RTC time: %s\r\n", ctime(&seconds)); 00028 00029 // Include to set static IP 00030 int net_static = net->set_network((SocketAddress)IP,(SocketAddress)NETMASK,(SocketAddress)GATEWAY); 00031 00032 printf("Connecting to network...\n\n"); 00033 00034 if (!net) { 00035 printf("No network interface found, select an interface in 'mbed_app.json'\n"); 00036 return NULL; 00037 } 00038 nsapi_error_t connect_status = net->connect(); 00039 if (connect_status != NSAPI_ERROR_OK) { 00040 printf("Failed to connect to network (%d)\n", connect_status); 00041 return NULL; 00042 } 00043 00044 SocketAddress net_addr; 00045 net->get_ip_address(&net_addr); 00046 printf("IP address: %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None"); 00047 net->get_netmask(&net_addr); 00048 printf("Netmask: %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None"); 00049 net->get_gateway(&net_addr); 00050 printf("Gateway: %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None"); 00051 printf("MAC: %s\n", net->get_mac_address()); 00052 00053 net->get_ip_address(&net_addr); 00054 const char *ip = net_addr.get_ip_address(); 00055 00056 if(ip){ 00057 printf("\nConnected\n\nGet NTP time...\n"); 00058 if(ntp.getNTP("0.pool.ntp.org",3600,1,1)){ 00059 seconds = time(NULL); 00060 printf("RTC time set by NTP: %s\n\n", ctime(&seconds)); 00061 } 00062 else{printf("No NTP could not set RTC !!\n\n"); 00063 } 00064 }else{ 00065 printf("No IP!!\n"); 00066 while(1); 00067 } 00068 00069 TCPSocket srv; 00070 TCPSocket *client_sock; // srv.accept() will return pointer to socket 00071 SocketAddress client_addr; 00072 00073 // Open the server on ethernet stack 00074 srv.open(net); 00075 // Bind the HTTP port (TCP 80) to the server 00076 srv.bind(80); 00077 //Can handle x simultaneous connections 00078 srv.listen(5); 00079 00080 printf("The Server IP address: '%s'\n", ip); 00081 printf("Waiting for connection....\r\n\n"); 00082 00083 nsapi_size_or_error_t result; 00084 00085 while(1){ 00086 00087 client_sock = srv.accept(); //return pointer of a client socket 00088 led=1; 00089 //this will fill address of client to the SocketAddress object 00090 client_sock->getpeername(&client_addr); 00091 printf("\nConnected,Client: %s Port: %d\n", client_addr.get_ip_address(), client_addr.get_port()); 00092 //receive client data, (set large enough buffer) 00093 result = client_sock->recv(recevbuffer, 1024); 00094 if (result < 0) { 00095 printf("Error! socket.recv() returned: %d\n", result); 00096 } 00097 00098 if(result){ 00099 //printf("Received Msg:\n%s\n\n", recevbuffer); // include to view complete receive buffer 00100 sscanf(recevbuffer,"%s %s",requestType,request); 00101 printf("request: %s Type: %s charcters:%d\n", requestType,request,result); 00102 00103 if(strcmp(request,"/")==0){ 00104 //send current mcu rtc time to client 00105 time_t seconds = time(NULL); 00106 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)); 00107 printf("Sending Message\n"); 00108 result=client_sock->send(sendbuffer, strlen(sendbuffer)); // send data in buffer to http port. 00109 printf("Sent Message, %d bytes\n",result); 00110 } 00111 else if(strcmp(request,"/favicon.ico")==0){ 00112 //send favicon if requested 00113 printf("Sending Favicon\n"); 00114 result=client_sock->send((char*)favicon_ico,sizeof(favicon_ico)); 00115 printf("Sent Favicon, %d bytes\n",result); 00116 } 00117 else{ 00118 // send page not found reply 00119 sprintf(sendbuffer,"HTTP/1.1 404 Not Found\nContent-type: text/plain\r\n\r\npage not found"); 00120 printf("Sending Not Found Message\n"); 00121 result=client_sock->send(sendbuffer, strlen(sendbuffer)); 00122 printf("Sent Not Found Message, %d bytes\n",result); 00123 } 00124 } 00125 else{ 00126 printf("Disconnected\n"); 00127 } 00128 //close socket 00129 client_sock->close(); 00130 led=0; 00131 } 00132 }
Generated on Wed Jul 13 2022 09:49:55 by 1.7.2