Chat (Telnet) Client

In this example, you will use your Ethernet Shield and your Arduino board to make a chat client.

Hardware Required

  • Arduino Ethernet Shield

  • Shield-compatible Arduino board

Circuit

The Ethernet shield allows you to connect a WizNet Ethernet controller to the Arduino boards via the SPI bus. It uses pins 10, 11, 12, and 13 for the SPI connection to the WizNet. Later models of the Ethernet shield also have an SD Card on board. Digital pin 4 is used to control the slave select pin on the SD card.

The shield should be connected to a network with an ethernet cable. You will need to change the network settings in the program to correspond to your network.

The circuit for this example.
The circuit for this example.

In the above image, the Arduino board would be stacked below the Ethernet shield.

Code

1/*
2
3 Telnet client
4
5 This sketch connects to a a telnet server (http://www.google.com)
6
7 using an Arduino Wiznet Ethernet shield. You'll need a telnet server
8
9 to test this with.
10
11 Processing's ChatServer example (part of the network library) works well,
12
13 running on port 10002. It can be found as part of the examples
14
15 in the Processing application, available at
16
17 http://processing.org/
18
19 Circuit:
20
21 * Ethernet shield attached to pins 10, 11, 12, 13
22
23 created 14 Sep 2010
24
25 modified 9 Apr 2012
26
27 by Tom Igoe
28
29 */
30
31#include <SPI.h>
32#include <Ethernet.h>
33
34// Enter a MAC address and IP address for your controller below.
35// The IP address will be dependent on your local network:
36byte mac[] = {
37
38 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
39};
40
41IPAddress ip(192, 168, 1, 177);
42
43// Enter the IP address of the server you're connecting to:
44
45IPAddress server(1, 1, 1, 1);
46
47// Initialize the Ethernet client library
48// with the IP address and port of the server
49// that you want to connect to (port 23 is default for telnet;
50// if you're using Processing's ChatServer, use port 10002):
51
52EthernetClient client;
53
54void setup() {
55
56 // You can use Ethernet.init(pin) to configure the CS pin
57
58 //Ethernet.init(10); // Most Arduino shields
59
60 //Ethernet.init(5); // MKR ETH shield
61
62 //Ethernet.init(0); // Teensy 2.0
63
64 //Ethernet.init(20); // Teensy++ 2.0
65
66 //Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet
67
68 //Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet
69
70 // start the Ethernet connection:
71
72 Ethernet.begin(mac, ip);
73
74 // Open serial communications and wait for port to open:
75
76 Serial.begin(9600);
77
78 while (!Serial) {
79
80 ; // wait for serial port to connect. Needed for native USB port only
81
82 }
83
84 // Check for Ethernet hardware present
85
86 if (Ethernet.hardwareStatus() == EthernetNoHardware) {
87
88 Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
89
90 while (true) {
91
92 delay(1); // do nothing, no point running without Ethernet hardware
93
94 }
95
96 }
97
98 while (Ethernet.linkStatus() == LinkOFF) {
99
100 Serial.println("Ethernet cable is not connected.");
101
102 delay(500);
103
104 }
105
106 // give the Ethernet shield a second to initialize:
107
108 delay(1000);
109
110 Serial.println("connecting...");
111
112 // if you get a connection, report back via serial:
113
114 if (client.connect(server, 10002)) {
115
116 Serial.println("connected");
117
118 } else {
119
120 // if you didn't get a connection to the server:
121
122 Serial.println("connection failed");
123
124 }
125}
126
127void loop() {
128
129 // if there are incoming bytes available
130
131 // from the server, read them and print them:
132
133 if (client.available()) {
134
135 char c = client.read();
136
137 Serial.print(c);
138
139 }
140
141 // as long as there are bytes in the serial queue,
142
143 // read them and send them out the socket if it's open:
144
145 while (Serial.available() > 0) {
146
147 char inChar = Serial.read();
148
149 if (client.connected()) {
150
151 client.print(inChar);
152
153 }
154
155 }
156
157 // if the server's disconnected, stop the client:
158
159 if (!client.connected()) {
160
161 Serial.println();
162
163 Serial.println("disconnecting.");
164
165 client.stop();
166
167 // do nothing:
168
169 while (true) {
170
171 delay(1);
172
173 }
174
175 }
176}

Contribute to Arduino

Join the community and suggest improvements to this article via GitHub. Make sure to read out contribution policy before making your pull request.

Missing something?

Check out our store and get what you need to follow this tutorial.