Jan Kamidra
/
TCP_EchoServer
Example for TCPSocket as EchoServer
Diff: main.cpp
- Revision:
- 0:633c10a3bb5d
- Child:
- 1:8c10d8f4e3aa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri May 08 18:47:52 2020 +0000 @@ -0,0 +1,80 @@ +#include "mbed.h" //MbedOS 5.15 +#include "EthernetInterface.h" + +#define ROUTER // commented = Static IP uncomented = address assigned by router +#ifndef ROUTER + #define IP "192.168.1.1" //Here place your static IP of Mbed + #define GATEWAY "0.0.0.0" + #define MASK "255.255.255.0" +#endif +#define PORT 20 + +DigitalOut led1(LED1); + +EthernetInterface eth; +TCPSocket server; +TCPSocket* client; +SocketAddress clientAddress; + +int main (void){ + printf("TCP Echo starting...\n"); + int eth_stat; +#ifndef ROUTER + eth.disconnect(); + eth_stat = eth.set_network((SocketAddress)IP,(SocketAddress)MASK,(SocketAddress)GATEWAY); + printf("set IP status: %i\n",eth_stat); +#endif + eth_stat = eth.connect(); + printf("connect status: %i\n",eth_stat); + + SocketAddress ip; + eth.get_ip_address(&ip); + const char *p_ip = ip.get_ip_address(); + printf("IP address: %s and Port: %d\n", p_ip ? p_ip : "None" , PORT ); + SocketAddress mask; + eth.get_netmask(&mask); + const char *p_mask = mask.get_ip_address(); + printf("Netmask: %s\n", p_mask ? p_mask : "None"); + SocketAddress gateway; + eth.get_gateway(&gateway); + const char *p_gateway = gateway.get_ip_address(); + printf("Gateway: %s\n", p_gateway ? p_gateway : "None"); + + if(ip){ + server.open(ð); + server.bind(PORT); + server.listen(1); + while (1) { + printf("Server bound and listening\n"); + client = server.accept(); + + client->getpeername(&clientAddress); + const char *p_clientAddress = clientAddress.get_ip_address(); + printf("Client connected from IP address: %s\n", p_clientAddress ? p_clientAddress : "None"); + + bool b = true; + while (b) { + char in_buffer[100]; + int n = client->recv(in_buffer, sizeof(in_buffer)); + if (n == 0) { + printf("Client disconnected\n"); + b = false; + }else{ + printf("Received message from Client :'%s'\n", in_buffer); + char out_buffer[100]; + n = sprintf(out_buffer,"Echo - %s", in_buffer); + + printf("Sending echo to client\n"); + client->send(out_buffer, n); + led1 =! led1; + } + led1 =! led1; + } + client->close(); + } + }else{ + printf("No IP\n"); + eth.disconnect(); + printf("Program end\n"); + } +} \ No newline at end of file