UIPEthernet library for Arduino IDE, Eclipse with arduino plugin and MBED/SMeshStudio (AVR,STM32F,ESP8266,Intel ARC32,Nordic nRF51,Teensy boards,Realtek Ameba(RTL8195A,RTL8710)), ENC28j60 network chip. Compatible with Wiznet W5100 Ethernet library API. Compiled and tested on Nucleo-F302R8. Master repository is: https://github.com/UIPEthernet/UIPEthernet/

Revision:
0:e3fb1267e3c3
Child:
11:3fb19220d9ec
diff -r 000000000000 -r e3fb1267e3c3 examples/UdpServer/UdpServer.ino
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/UdpServer/UdpServer.ino	Wed Dec 21 16:58:10 2016 +0100
@@ -0,0 +1,107 @@
+/*
+ * UIPEthernet UdpServer example.
+ *
+ * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based
+ * Ethernet-shield.
+ *
+ * UIPEthernet uses the fine uIP stack by Adam Dunkels <adam@sics.se>
+ *
+ *      -----------------
+ *
+ * This UdpServer example sets up a udp-server at 192.168.0.6 on port 5000.
+ * send packet via upd to test
+ *
+ * Copyright (C) 2013 by Norbert Truchsess (norbert.truchsess@t-online.de)
+ */
+
+#include <UIPEthernet.h>
+#include "utility/logging.h"
+
+EthernetUDP udp;
+
+void setup() {
+
+  #if ACTLOGLEVEL>LOG_NONE
+    LogObject.begin(9600);
+  #endif
+
+  uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05};
+
+  Ethernet.begin(mac,IPAddress(192,168,0,6));
+
+  int success = udp.begin(5000);
+
+  #if ACTLOGLEVEL>=LOG_INFO
+    LogObject.uart_send_str(F("initialize: "));
+    LogObject.uart_send_strln(success ? "success" : "failed");
+  #endif
+
+}
+
+void loop() {
+
+  //check for new udp-packet:
+  int size = udp.parsePacket();
+  if (size > 0) {
+    do
+      {
+        char* msg = (char*)malloc(size+1);
+        int len = udp.read(msg,size+1);
+        msg[len]=0;
+        #if ACTLOGLEVEL>=LOG_INFO
+          LogObject.uart_send_str(F("received: '"));
+          LogObject.uart_send_str(msg);
+        #endif
+        free(msg);
+      }
+    while ((size = udp.available())>0);
+    //finish reading this packet:
+    udp.flush();
+    #if ACTLOGLEVEL>=LOG_INFO
+      LogObject.uart_send_strln(F("'"));
+    #endif
+    int success;
+    do
+      {
+      #if ACTLOGLEVEL>=LOG_INFO
+        LogObject.uart_send_str(F("remote ip: "));
+        LogObject.println(udp.remoteIP());
+        LogObject.uart_send_str(F("remote port: "));
+        LogObject.println(udp.remotePort());
+      #endif
+        //send new packet back to ip/port of client. This also
+        //configures the current connection to ignore packets from
+        //other clients!
+        success = udp.beginPacket(udp.remoteIP(),udp.remotePort());
+      #if ACTLOGLEVEL>=LOG_INFO
+        LogObject.uart_send_str(F("beginPacket: "));
+        LogObject.uart_send_strln(success ? "success" : "failed");
+      #endif
+    //beginPacket fails if remote ethaddr is unknown. In this case an
+    //arp-request is send out first and beginPacket succeeds as soon
+    //the arp-response is received.
+      }
+    while (!success);
+
+    success = udp.println(F("hello world from arduino"));
+
+    #if ACTLOGLEVEL>=LOG_INFO
+      LogObject.uart_send_str(F("bytes written: "));
+      LogObject.uart_send_decln(success);
+    #endif
+
+    success = udp.endPacket();
+
+    #if ACTLOGLEVEL>=LOG_INFO
+      LogObject.uart_send_str(F("endPacket: "));
+      LogObject.uart_send_strln(success ? "success" : "failed");
+    #endif
+
+    udp.stop();
+    //restart with new connection to receive packets from other clients
+    #if ACTLOGLEVEL>=LOG_INFO
+      LogObject.uart_send_str(F("restart connection: "));
+      LogObject.uart_send_strln(udp.begin(5000) ? "success" : "failed");
+    #endif
+  }
+}