diff --git a/libraries/Ethernet/examples/AdvancedChatServer/ChatServer.ino b/libraries/Ethernet/examples/AdvancedChatServer/ChatServer.ino new file mode 100644 index 000000000..d50e5a657 --- /dev/null +++ b/libraries/Ethernet/examples/AdvancedChatServer/ChatServer.ino @@ -0,0 +1,79 @@ +/* + Chat Server + + A simple server that distributes any incoming messages to all + connected clients. 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 + + */ + +#include +#include + +// Enter a MAC address and IP address for your controller below. +// The IP address will be dependent on your local network. +// gateway and subnet are optional: +byte mac[] = { + 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; +IPAddress ip(192,168,1, 177); +IPAddress gateway(192,168,1, 1); +IPAddress subnet(255, 255, 0, 0); + + +// telnet defaults to port 23 +EthernetServer server(23); +boolean alreadyConnected = false; // whether or not the client was connected previously + +void setup() { + // initialize the ethernet device + Ethernet.begin(mac, ip, gateway, subnet); + // start listening for clients + server.begin(); + // Open serial communications and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for Leonardo only + } + + + Serial.print("Chat server address:"); + Serial.println(Ethernet.localIP()); +} + +void loop() { + // wait for a new client: + EthernetClient client = server.available(); + + // when the client sends the first byte, say hello: + if (client) { + if (!alreadyConnected) { + // clead out the input buffer: + client.flush(); + Serial.println("We have a new client"); + client.println("Hello, client!"); + alreadyConnected = true; + } + + if (client.available() > 0) { + // read the bytes incoming from the client: + char thisChar = client.read(); + // echo the bytes back to the client: + server.write(thisChar); + // echo the bytes to the server as well: + Serial.write(thisChar); + } + } +} + + + diff --git a/libraries/Ethernet/examples/ChatServer/ChatServer.ino b/libraries/Ethernet/examples/ChatServer/ChatServer.ino index 14b62dd26..d50e5a657 100644 --- a/libraries/Ethernet/examples/ChatServer/ChatServer.ino +++ b/libraries/Ethernet/examples/ChatServer/ChatServer.ino @@ -2,8 +2,7 @@ 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. + connected clients. 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. @@ -15,8 +14,6 @@ by David A. Mellis modified 9 Apr 2012 by Tom Igoe - redesigned to make use of operator== 25 Nov 2013 - by Norbert Truchsess */ @@ -28,15 +25,14 @@ // gateway and subnet are optional: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; -IPAddress ip(192,168,0,6); -IPAddress gateway(192,168,0, 1); -IPAddress subnet(255, 255, 255, 0); +IPAddress ip(192,168,1, 177); +IPAddress gateway(192,168,1, 1); +IPAddress subnet(255, 255, 0, 0); // telnet defaults to port 23 EthernetServer server(23); - -EthernetClient clients[4]; +boolean alreadyConnected = false; // whether or not the client was connected previously void setup() { // initialize the ethernet device @@ -58,54 +54,26 @@ void loop() { // wait for a new client: EthernetClient client = server.available(); + // when the client sends the first byte, say hello: if (client) { - - boolean 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; - break; - } - } - + if (!alreadyConnected) { // clead out the input buffer: client.flush(); Serial.println("We have a new client"); - client.println("Hello, client!"); - client.print("your IP: "); - client.println(client.remoteIP()); - client.print("your port: "); - client.println(client.remotePort()); - } + client.println("Hello, client!"); + alreadyConnected = true; + } 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)) { - continue; - } - clients[i].write(thisChar); - } + // echo the bytes back to the client: + server.write(thisChar); // echo the bytes to the server as well: Serial.write(thisChar); } } - 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(); - } - } } + + +