2
2
Chat Server
3
3
4
4
A simple server that distributes any incoming messages to all
5
- connected clients but the client the message comes from.
6
- To use telnet to your device's IP address and type.
5
+ connected clients. To use telnet to your device's IP address and type.
7
6
You can see the client's input in the serial monitor as well.
8
7
Using an Arduino Wiznet Ethernet shield.
9
8
15
14
by David A. Mellis
16
15
modified 9 Apr 2012
17
16
by Tom Igoe
18
- redesigned to make use of operator== 25 Nov 2013
19
- by Norbert Truchsess
20
17
21
18
*/
22
19
28
25
// gateway and subnet are optional:
29
26
byte mac[] = {
30
27
0xDE , 0xAD , 0xBE , 0xEF , 0xFE , 0xED };
31
- IPAddress ip (192 ,168 ,0 , 6 );
32
- IPAddress gateway (192 ,168 ,0 , 1 );
33
- IPAddress subnet (255 , 255 , 255 , 0 );
28
+ IPAddress ip (192 ,168 ,1 , 177 );
29
+ IPAddress gateway (192 ,168 ,1 , 1 );
30
+ IPAddress subnet (255 , 255 , 0 , 0 );
34
31
35
32
36
33
// telnet defaults to port 23
37
34
EthernetServer server (23 );
38
-
39
- EthernetClient clients[4 ];
35
+ boolean alreadyConnected = false ; // whether or not the client was connected previously
40
36
41
37
void setup () {
42
38
// initialize the ethernet device
@@ -58,54 +54,26 @@ void loop() {
58
54
// wait for a new client:
59
55
EthernetClient client = server.available ();
60
56
57
+ // when the client sends the first byte, say hello:
61
58
if (client) {
62
-
63
- boolean newClient = true ;
64
- for (byte i=0 ;i<4 ;i++) {
65
- // check whether this client refers to the same socket as one of the existing instances:
66
- if (clients[i]==client) {
67
- newClient = false ;
68
- break ;
69
- }
70
- }
71
-
72
- if (newClient) {
73
- // check which of the existing clients can be overridden:
74
- for (byte i=0 ;i<4 ;i++) {
75
- if (!clients[i] && clients[i]!=client) {
76
- clients[i] = client;
77
- break ;
78
- }
79
- }
80
-
59
+ if (!alreadyConnected) {
81
60
// clead out the input buffer:
82
61
client.flush ();
83
62
Serial.println (" We have a new client" );
84
- client.println (" Hello, client!" );
85
- client.print (" your IP: " );
86
- client.println (client.remoteIP ());
87
- client.print (" your port: " );
88
- client.println (client.remotePort ());
89
- }
63
+ client.println (" Hello, client!" );
64
+ alreadyConnected = true ;
65
+ }
90
66
91
67
if (client.available () > 0 ) {
92
68
// read the bytes incoming from the client:
93
69
char thisChar = client.read ();
94
- // echo the bytes back to all other connected clients:
95
- for (byte i=0 ;i<4 ;i++) {
96
- if (!clients[i] || (clients[i]==client)) {
97
- continue ;
98
- }
99
- clients[i].write (thisChar);
100
- }
70
+ // echo the bytes back to the client:
71
+ server.write (thisChar);
101
72
// echo the bytes to the server as well:
102
73
Serial.write (thisChar);
103
74
}
104
75
}
105
- for (byte i=0 ;i<4 ;i++) {
106
- if (!(clients[i].connected ())) {
107
- // client.stop() invalidates the internal socket-descriptor, so next use of == will allways return false;
108
- clients[i].stop ();
109
- }
110
- }
111
76
}
77
+
78
+
79
+
0 commit comments