A basic example of two treads for TCP and UDP. The TCP server in its thread waiting for a command (!start or !stop) from a client. That control the UDP thread and it start or stop sending a dummy message.

Revision:
0:d54540de63d4
Child:
1:191f7e703c43
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri May 29 11:10:56 2020 +0000
@@ -0,0 +1,131 @@
+#include "mbed.h" //MbedOS 5.15 on Nucleo-F767ZI
+#include "NetworkInterface.h"
+ 
+#define BUFFSIZE 50
+ 
+#define ROUTER
+#ifndef ROUTER
+    #define IP          "192.168.1.1"   //Here place your Static IP of Mbed, when you want it to connect directly to PC
+    #define GATEWAY     "0.0.0.0"
+    #define MASK        "255.255.255.0"
+#endif
+#define ADDRESS         "192.168.1.10"       /*Here place IP of your PC. Run cmd.exe and write command ipconfig.
+                                             If the address will be incorrect, the first message will be lost
+                                             and connection will be established with first received message from opposite side.*/
+#define UDPPORT           20
+#define UDPREMOTEPORT   2000
+#define TCPPORT           80
+
+ 
+DigitalOut          led1(LED1);
+DigitalOut          led2(LED2);
+DigitalOut          led3(LED3);
+Thread              threadUDP;
+Thread              threadTCP;
+NetworkInterface    *net = NetworkInterface::get_default_instance();
+SocketAddress       ip; 
+volatile bool       startFlag = false;
+
+
+void serverTCP(){
+    printf("TCP Server starting...\n");
+    TCPSocket       server;
+    TCPSocket       *client;
+    SocketAddress   clientAddress;
+    char            in_buffer[BUFFSIZE];
+    const char      *selection[] = {"!stop","!start"};
+    server.open(net);
+    server.bind(TCPPORT);
+    server.listen(1);
+    printf("TCP Server bound and listening at port: %d\n", TCPPORT);
+    while (1) {
+        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) {
+            led2 =! led2;
+            int n = client->recv(in_buffer, BUFFSIZE);
+            if (n == 0) {
+                printf("Client disconnected\n");
+                b = false;
+            }else{
+                in_buffer[n] = '\0';
+                char *result = nullptr;
+                for(int i = 0; i<2; i++){
+                    result = strstr(in_buffer,selection[i]);
+                    if(result != nullptr){
+                        startFlag = i;
+                        break;
+                    }
+                }
+                printf("Received message from Client :'%s'\n", in_buffer);
+            }
+        }
+        client->close();
+    }
+    server.close();
+    printf("Thread end\n");
+}
+ 
+void udpEcho(){
+    printf("UDP starting...\n");
+        UDPSocket       sock; 
+        SocketAddress   addr;
+        SocketAddress   targetAddr(ADDRESS,UDPREMOTEPORT); 
+        sock.open(net);
+        sock.bind(UDPPORT);
+        printf("UDP listens on the local port: %d and send to the remote port %d\n", UDPPORT, UDPREMOTEPORT);
+        int dummyValue = 0;
+        char buffer[BUFFSIZE]; 
+        while(1){
+            while(!startFlag) ThisThread::sleep_for(100);
+            sprintf(buffer,"Dummy value %d\n",dummyValue++);
+            sock.sendto(targetAddr, buffer, sizeof(buffer));
+            printf("Send back: %s", buffer);
+            led3 =! led3;
+            ThisThread::sleep_for(500);
+        }
+}
+ 
+int main() { 
+    printf("Example of UDP and TCP at once\n");
+    int net_stat;
+#ifndef ROUTER
+    net->disconnect();
+    net_stat = net->set_network((SocketAddress)IP,(SocketAddress)MASK,(SocketAddress)GATEWAY);
+    printf("Network set IP status: %s\n", net_stat ? "Error": "OK");
+#endif
+printf("Connecting...");
+    net_stat = net->connect();
+    printf("%s\n",net_stat ? "Error": "OK");
+    net->get_ip_address(&ip);
+    const char *p_ip = ip.get_ip_address();
+    printf("Device IP address: %s\n", p_ip ? p_ip : "None");
+    if(ip){
+        SocketAddress mask;
+        net->get_netmask(&mask);
+        const char *p_mask = mask.get_ip_address();
+        printf("Netmask: %s\n", p_mask ? p_mask : "None");
+        SocketAddress gateway;
+        net->get_gateway(&gateway);
+        const char *p_gateway = gateway.get_ip_address();
+        printf("Gateway: %s\n", p_gateway ? p_gateway : "None");
+        printf("Starting of TCP and UDP threads...\n");
+        ThisThread::sleep_for(200);
+        threadUDP.start(callback(udpEcho));
+        ThisThread::sleep_for(200);
+        threadTCP.start(callback(serverTCP));
+        ThisThread::sleep_for(200);
+    }else{
+        printf("No IP\n");
+        if(net != nullptr) net->disconnect();
+        printf("Program End\n");
+    }
+    
+    while(1) {
+        led1 =! led1;
+        ThisThread::sleep_for(1000);
+    } 
+}  
\ No newline at end of file