Skip to main content

Ethernet Server

Ethernet Server

This library enables the creation of a server that listens for incoming connections on the specified port.

EthernetServer()

Description

Constructor to create a server.

Syntax (Example)

EthernetServer server(uint16_t port)

Parameters

The port to listen on (uint16_t).

begin

Description

Tells the server to begin listening for incoming connections.

Syntax

server.begin()

Parameters

None

Returns

None

available

Description

Gets a client that is connected to the server and has data available for reading. The connection persists when the returned client object goes out of scope.

Syntax

server.available()

Parameters

None

Returns

Returns a Client object; if no Client has data available for reading, this object will evaluate to false in an if-statement.

write

Description

Write data to all the clients connected to a server. This data is sent as a byte or series of bytes.

Syntax

server.write(val)
server.write(buf, len)

Parameters

val: A value to send as a single byte (byte or char)
buf: An array to send as a series of bytes (byte or char)
len: The length of the buffer.

Returns

Byte
write() returns the number of bytes written. It is not necessary to read this.

print

Description

Print data to all the clients connected to a server. Prints numbers as a sequence of digits, each an ASCII character (e.g. the number 123 is sent as the three characters '1', '2', '3').

Syntax

server.print(data)
server.print(data, BASE)

Parameters

data: The data to print (char, byte, int, long, or string)
BASE (optional): The base in which to print numbers: BIN for binary (base 2), DEC for decimal (base 10), OCT for octal (base 8), HEX for hexadecimal (base 16)

Returns

Byte
print() will return the number of bytes written, though reading that number is optional.

println

Description

Print data, followed by a newline, to all the clients connected to a server. Prints numbers as a sequence of digits, each an ASCII character (e.g. the number 123 is sent as the three characters '1', '2', '3').

Syntax

server.println()
server.println(data)
server.println(data, BASE)

Parameters

data (optional): The data to print (char, byte, int, long, or string)
BASE (optional): The base in which to print numbers: BIN for binary (base 2), DEC for decimal (base 10), OCT for octal (base 8), HEX for hexadecimal (base 16).

Returns

Byte
println() will return the number of bytes written, though reading that number is optional.


Sample Code

Here is an example for the Ethernet Server library. The server returns to a client the result of analogRead A0-A5.


        #include <Arduino.h>
        #include <SPI.h>
        #include <Ethernet.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,1,177);
            
        // Initialize the Ethernet server library
        // with the IP address and port you want to use 
        // (port 80 is default for HTTP):
        EthernetServer server(80);
            
        void setup() {
            // Open serial communications and wait for port to open:
            Serial.begin(9600);
            while (!Serial) {
            ; // wait for serial port to connect. Needed for Leonardo only
            }
            
            
            // start the Ethernet connection and the server:
            Ethernet.begin();
            server.begin();
            Serial.print("server is at ");
            Serial.println(Ethernet.localIP());
        }
            
            
        void loop() {
            // listen for incoming clients
            EthernetClient client = server.available();
            if (client) {
            Serial.println("new client");
            // an http request ends with a blank line
            boolean currentLineIsBlank = true;
            while (client.connected()) {
                if (client.available()) {
                char c = client.read();
                Serial.write(c);
                // if you've gotten to the end of the line (received a newline
                // character) and the line is blank, the http request has ended,
                // so you can send a reply
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");  // the connection will be closed after completion of the response
                client.println("Refresh: 5");  // refresh the page automatically every 5 sec
                    client.println();
                    client.println("<!DOCTYPE HTML>");
                    client.println("<html>");
                    // output the value of each analog input pin
                    for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
                    int sensorReading = analogRead(analogChannel);
                    client.print("analog input ");
                    client.print(analogChannel);
                    client.print(" is ");
                    client.print(sensorReading);
                    client.println("</br>");
                    }
                    client.println("</html>");
                    break;
                }
                if (c == '\n') {
                    // you're starting a new line
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // you've gotten a character on the current line
                    currentLineIsBlank = false;
                }
                }
            }
            // give the web browser time to receive the data
            delay(1);
            // close the connection:
            client.stop();
            Serial.println("client disconnected");
            }
        }