用来分发任何传入的消息发送给所有一个简单的服务器,即局域网内多个服务端互相聊天。 连接的客户端,消息来自客户端。 要使用telnet到你的设备的IP地址和类型。
1、将ALPHA ENC28J60堆叠于ALPHA MEGA328-U上;
2、用网线连接交换机与ALPHA ENC28J60,在拨码开关中,将10拨上;
3、将ALPHA MEGA328-U通过数据线连接上电脑
/* 高级聊天服务器 用来分发任何传入的消息发送给所有一个简单的服务器 创建182009年12月 由David A.梅利斯 修改2012年4月9日 由汤姆Igoe 重新设计,使操作者使用==252013年11月 由诺伯特Truchsess */ #include <UIPEthernet.h> // 为您的控制器下方输入MAC地址和IP地址 //IP地址将取决于你的本地网络上。 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,0,6);//映射到你的路由器,更改最后一位IP地址 // 默认的telnet端口23 EthernetServer server(23); EthernetClient clients[4]; void setup() { // 初始化以太网设备 Ethernet.begin(mac, ip); //开始监听客户端 server.begin(); // 打开串口通信和等待端口打开: Serial.begin(9600); while (!Serial) { ; // 等待串口连接。只被leonardo需要。 } Serial.print("Chat server address:"); Serial.println(Ethernet.localIP()); } void loop() { // 等待一个新的客户端 EthernetClient client = server.available(); if (client) { boolean newClient = true; for (byte i=0;i<4;i++) { //检查该客户端是否指的是同一个串口作为现有实例之一: if (clients[i]==client) { newClient = false; break; } } if (newClient) { //检查其现有的客户端,也可以改掉: for (byte i=0;i<4;i++) { if (!clients[i] && clients[i]!=client) { clients[i] = client; // 清理掉输入缓冲器: client.flush(); // 清理掉输入缓冲器: client.flush(); Serial.println("We have a new client"); client.println("Hello, client!"); client.print("my IP: "); client.println(Ethernet.localIP()); break; } } } if (client.available() > 0) { //从客户端读取传入的字节: char thisChar = client.read(); // 呼应字节后面所有其他连接的客户端: for (byte i=0;i<4;i++) { if (clients[i] && clients[i]!=client) { clients[i].write(thisChar); } } // 呼应所有包括的字节到服务器: Serial.write(thisChar); } } for (byte i=0;i<4;i++) { if (!(clients[i].connected())) { // client.stop()无效内部插座描述符,这样下次使用==将始终返回false; clients[i].stop(); } } }