说明
传统的server.available()函数只会在发送数据后告诉你一个新的客户端,这使得FTP等一些协议无法正确实现。
目的是程序将使用available() 或accept(),但不能同时使用两者。使用available(),客户端连接继续由 EthernetServer 管理。您不需要保留客户端对象,因为调用 available() 将为您提供客户端发送的任何数据。使用available() 可以用很少的代码编写简单的服务器。
使用accept(),EthernetServer 只为您提供一次客户端,无论它是否已发送任何数据。您必须跟踪连接的客户端。这需要更多代码,但您可以获得更多控制权。
用法
server.accept()
参数
空
返回
- 一个客户对象。如果没有客户端可以读取数据,则此对象将在 if-statement 中评估为 false。 (以太网客户端)。
示例
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 69, 104);
// telnet defaults to port 23
EthernetServer server(23);
EthernetClient clients[8];
void setup() {
Ethernet.begin(mac, ip);
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// start listening for clients
server.begin();
}
void loop() {
// check for any new client connecting, and say hello (before any incoming data)
EthernetClient newClient = server.accept();
if (newClient) {
for (byte i = 0; i < 8; i++) {
if (!clients[i]) {
newClient.print("Hello, client number: ");
newClient.println(i);
// Once we "accept", the client is no longer tracked by EthernetServer
// so we must store it into our list of clients
clients[i] = newClient;
break;
}
}
}
// check for incoming data from all clients
for (byte i = 0; i < 8; i++) {
while (clients[i] && clients[i].available() > 0) {
// read incoming data from the client
Serial.write(clients[i].read());
}
}
// stop any clients which disconnect
for (byte i = 0; i < 8; i++) {
if (clients[i] && !clients[i].connected()) {
clients[i].stop();
}
}
}
相关用法
- Arduino Ethernet - server.available()用法及代码示例
- Arduino Ethernet - server.begin()用法及代码示例
- Arduino Ethernet - server.write()用法及代码示例
- Arduino Ethernet - EthernetUDP.parsePacket()用法及代码示例
- Arduino Ethernet - Ethernet.setRetransmissionTimeout()用法及代码示例
- Arduino Ethernet - Ethernet.MACAddress()用法及代码示例
- Arduino Ethernet - Ethernet.hardwareStatus()用法及代码示例
- Arduino Ethernet - client.setConnectionTimeout()用法及代码示例
- Arduino Ethernet - client.connected()用法及代码示例
- Arduino Ethernet - EthernetUDP.beginPacket()用法及代码示例
- Arduino Ethernet - EthernetUDP.available()用法及代码示例
- Arduino Ethernet - Ethernet.localIP()用法及代码示例
- Arduino Ethernet - EthernetUDP.read()用法及代码示例
- Arduino Ethernet - EthernetUDP.endPacket()用法及代码示例
- Arduino Ethernet - Ethernet.setDnsServerIP()用法及代码示例
- Arduino Ethernet - client.remotePort()用法及代码示例
- Arduino Ethernet - EthernetUDP.begin()用法及代码示例
- Arduino Ethernet - Ethernet.init()用法及代码示例
- Arduino Ethernet - Ethernet.setMACAddress()用法及代码示例
- Arduino Ethernet - if(server)用法及代码示例
- Arduino Ethernet - client.available()用法及代码示例
- Arduino Ethernet - UDP.remotePort()用法及代码示例
- Arduino Ethernet - EthernetServer()用法及代码示例
- Arduino Ethernet - Ethernet.setSubnetMask()用法及代码示例
- Arduino Ethernet - UDP.remoteIP()用法及代码示例
注:本文由纯净天空筛选整理自arduino.cc大神的英文原创作品 Ethernet - server.accept()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。