0

Arduino 以太网(板或屏蔽)最多支持 4 个连接。如果充当服务器,很容易造成拒绝服务:只需打开 4 个与 Arduino 的连接,不发送任何数据。服务器代码永远不会意识到连接已建立,因为 EthernetServer::available() 方法仅在连接有可用数据时返回 EthernetClient。因此,只要客户端维护连接,连接就会保持打开状态,从而阻止 Arduino 处理其他请求,而服务器在一段时间后没有机会关闭它们。

所以问题是:有没有办法在空闲连接上设置超时,也许是在 Wiznet 芯片级别?

4

1 回答 1

0

作为背景信息,对话的 GET HTTP 模型称为“无状态”,这意味着可以关闭连接然后重新打开而不会丢失信息。

但是,浏览器可以通过 HTTP 关键字请求保持连接打开。

允许服务器关闭连接,实际上 HTTP/1.1 定义了从服务器到浏览器的消息,就是这样做的。

因此,在您控制所有软件(TCP/IP 堆栈和服务器代码)的 Arduino 中,您应该修改 WizNEt 库或添加您自己的包装器以使对话框超时并关闭它,而与浏览器在做什么。

因此,没有 DNS(或者至少是 DNS 的保持线路开放风格)。

获取 HTTP/1.1 规范(它在网络上)以获取更多信息和细节。

于 2013-10-30T00:25:00.123 回答