Jan Kamidra
/
TCP_EchoServer
Example for TCPSocket as EchoServer
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Tue Jul 12 2022 18:32:03 by 1.7.2