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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/AdvancedChatServer/AdvancedChatServer.ino	Wed Dec 21 16:58:10 2016 +0100
@@ -0,0 +1,113 @@
+/*
+ Advanced Chat Server
+
+ A simple server that distributes any incoming messages to all
+ connected clients but the client the message comes from.
+ To use telnet to  your device's IP address and type.
+ You can see the client's input in the serial monitor as well.
+ Using an Arduino Wiznet Ethernet shield.
+
+ Circuit:
+ * Ethernet shield attached to pins 10, 11, 12, 13
+ * Analog inputs attached to pins A0 through A5 (optional)
+
+ created 18 Dec 2009
+ by David A. Mellis
+ modified 9 Apr 2012
+ by Tom Igoe
+ redesigned to make use of operator== 25 Nov 2013
+ by Norbert Truchsess
+
+ */
+
+#include <UIPEthernet.h>
+#include <utility/logging.h>
+
+// Enter a MAC address and IP address for your controller below.
+// The IP address will be dependent on your local network.
+
+byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
+IPAddress ip(192,168,0,6);
+
+// telnet defaults to port 23
+EthernetServer server(23);
+
+EthernetClient clients[4];
+
+void setup() {
+  // initialize the ethernet device
+  Ethernet.begin(mac, ip);
+  // start listening for clients
+  server.begin();
+ // Open serial communications and wait for port to open:
+  #if ACTLOGLEVEL>LOG_NONE
+    LogObject.begin(9600);
+    while (!LogObject)
+      {
+      ; // wait for serial port to connect. Needed for Leonardo only
+      }
+  #endif
+
+  #if ACTLOGLEVEL>=LOG_INFO
+    LogObject.uart_send_str(F("Chat server address:"));
+    LogObject.println(Ethernet.localIP());
+  #endif
+}
+
+void loop() {
+  // wait for a new client:
+  EthernetClient client = server.available();
+
+  if (client) {
+
+    bool newClient = true;
+    for (byte i=0;i<4;i++) {
+      //check whether this client refers to the same socket as one of the existing instances:
+      if (clients[i]==client) {
+        newClient = false;
+        break;
+      }
+    }
+
+    if (newClient) {
+      //check which of the existing clients can be overridden:
+      for (byte i=0;i<4;i++) {
+        if (!clients[i] && clients[i]!=client) {
+          clients[i] = client;
+          // clead out the input buffer:
+          client.flush();
+          // clead out the input buffer:
+          client.flush();
+          #if ACTLOGLEVEL>=LOG_INFO
+            LogObject.uart_send_strln(F("We have a new client"));
+          #endif
+          client.println(F("Hello, client!"));
+          client.print(F("my IP: "));
+          client.println(Ethernet.localIP());
+          break;
+        }
+      }
+    }
+
+    if (client.available() > 0) {
+      // read the bytes incoming from the client:
+      char thisChar = client.read();
+      // echo the bytes back to all other connected clients:
+      for (byte i=0;i<4;i++) {
+        if (clients[i] && clients[i]!=client) {
+          clients[i].write(thisChar);
+        }
+      }
+      // echo the bytes to the server as well:
+      #if ACTLOGLEVEL>=LOG_INFO
+        LogObject.write(thisChar);
+      #endif
+    }
+  }
+  for (byte i=0;i<4;i++) {
+    if (!(clients[i].connected())) {
+      // client.stop() invalidates the internal socket-descriptor, so next use of == will allways return false;
+      clients[i].stop();
+    }
+  }
+}