Example for TCPSocket as EchoServer

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h" //MbedOS 5.15
00002 #include "NetworkInterface.h"
00003 
00004 #define BUFFSIZE 50
00005  
00006 #define ROUTER // commented = Static IP uncomented = address assigned by router
00007 #ifndef ROUTER
00008     #define IP          "192.168.1.1"   //Here place your static IP of Mbed
00009     #define GATEWAY     "0.0.0.0"
00010     #define MASK        "255.255.255.0"
00011 #endif
00012 #define PORT            20
00013  
00014 DigitalOut led1(LED1);
00015  
00016 NetworkInterface *net = NetworkInterface::get_default_instance();
00017 TCPSocket server;
00018 TCPSocket* client;
00019 SocketAddress clientAddress;
00020 
00021 char   *in_buffer;
00022 char   *out_buffer;
00023  
00024 int main (void){
00025     printf("TCP Echo starting...\n");
00026     int net_stat;
00027 #ifndef ROUTER
00028     net->disconnect();
00029     net_stat = net->set_network((SocketAddress)IP,(SocketAddress)MASK,(SocketAddress)GATEWAY);
00030     printf("set IP status: %i\n",net_stat);
00031 #endif
00032     net_stat = net->connect();
00033     printf("connect status: %i\n",net_stat);
00034  
00035     SocketAddress ip; 
00036     net->get_ip_address(&ip);
00037     const char *p_ip = ip.get_ip_address();
00038     printf("IP address: %s and Port: %d\n", p_ip ? p_ip : "None" , PORT );
00039     SocketAddress mask;
00040     net->get_netmask(&mask);
00041     const char *p_mask = mask.get_ip_address();
00042     printf("Netmask: %s\n", p_mask ? p_mask : "None");
00043     SocketAddress gateway;
00044     net->get_gateway(&gateway);
00045     const char *p_gateway = gateway.get_ip_address();
00046     printf("Gateway: %s\n", p_gateway ? p_gateway : "None");
00047     
00048     if(ip){ 
00049         server.open(net);
00050         server.bind(PORT);
00051         server.listen(1);
00052         while (1) {
00053             printf("Server bound and listening\n");
00054             client = server.accept();
00055  
00056             client->getpeername(&clientAddress);
00057             const char *p_clientAddress = clientAddress.get_ip_address();
00058             printf("Client connected from IP address: %s\n", p_clientAddress ? p_clientAddress : "None");
00059             
00060             bool b = true;
00061             while (b) {
00062                 in_buffer = new char[BUFFSIZE];
00063                 int n = client->recv(in_buffer, BUFFSIZE);
00064                 if (n == 0) {
00065                     printf("Client disconnected\n");
00066                     b = false;
00067                 }else{
00068                     in_buffer[n] = '\0';
00069                     printf("Received message from Client :'%s'\n", in_buffer);
00070                     out_buffer = new char[BUFFSIZE];
00071                     n = sprintf(out_buffer,"Echo - %s", in_buffer);
00072                     
00073                     printf("Sending echo to client\n");
00074                     client->send(out_buffer, n);
00075                     led1 =! led1;
00076                     delete []out_buffer;
00077                 }
00078                 led1 =! led1;
00079                 delete []in_buffer;
00080             }
00081             client->close();
00082         }
00083     }else{
00084             printf("No IP\n");
00085             net->disconnect();
00086             printf("Program end\n");
00087     }
00088 }