UDP echo with thread

main.cpp

Committer:
JohnnyK
Date:
2019-07-03
Revision:
2:01b03970605d
Parent:
1:9c712ebb90d3
Child:
3:9ab431fc54e2

File content as of revision 2:01b03970605d:

#include "mbed.h" //MbedOS 5.13
#include "EthernetInterface.h" 

#define ADDRESS "192.168.1.10" //Here place IP of your PC. Run cmd.exe and write command ipconfig
#define LOCALPORT         20
#define REMOTEPORT      2000

#define ROUTER
#ifndef ROUTER
    #define IP         "192.168.1.1"
    #define GATEWAY    "0.0.0.0"
    #define MASK       "255.255.255.0"
#endif

Thread thread;
DigitalOut led1(LED1);
DigitalOut led2(LED2);

void udpEcho(){
    EthernetInterface eth;
    UDPSocket sock; 
    SocketAddress addr(0,LOCALPORT);
    int eth_stat;
#ifndef ROUTER
    eth.disconnect();
    eth_stat = eth.set_network(IP,MASK,GATEWAY);
    printf("set IP status: %i\n",eth_stat);
#endif
    eth_stat = eth.connect();
    printf("connect status: %i\n",eth_stat);
    const char *ip = eth.get_ip_address();
    const char *mac = eth.get_mac_address();
    printf("MAC address is: %s\n", mac ? mac : "No MAC");
    printf("IP address is: %s\n", ip ? ip : "No IP");
    // Check ip
    if(ip){// Check ip
        sock.open(&eth);
        sock.bind(LOCALPORT);
        printf("Listen on local port: %d and send to remote port %d\n", LOCALPORT, REMOTEPORT);
        char buffer[] = "Hello World, UDP Echo server"; 
        printf("Sending message '%s' to server (%s)\n",buffer,ip); 
        sock.sendto(ADDRESS, REMOTEPORT, buffer, sizeof(buffer));
        printf("Waiting for message...\n");
        
        while(1) {
            char in_buffer[80];
            int n = sock.recvfrom(&addr, &in_buffer, sizeof(in_buffer)); 
            in_buffer[n] = '\0'; 
            printf("Recieved: %s\n", in_buffer);
            
            char out_buffer[80];
            n = sprintf(out_buffer,"Echo - %s", in_buffer);
            out_buffer[n] = '\0';
            printf("Send back: %s\n", out_buffer);
            sock.sendto(addr.get_ip_address(), REMOTEPORT, out_buffer, sizeof(out_buffer));
            printf("IP address is: %s\n", addr.get_ip_address());
            led2 =! led2;
        } 
        /*sock.close();
        eth.disconnect(); */
    }else{
        printf("No IP\n");
        //eth.disconnect();
        printf("Thread end\n");
    }
}


int main() { 
    printf("UDP echo starting...\n");
    thread.start(callback(udpEcho));
    wait(1);
    
    while(1) {
        led1 =! led1;
        wait(1);
    } 
}