C++ 如何修复LAN上导致超时的多个Arduinos

C++ 如何修复LAN上导致超时的多个Arduinos,c++,arduino,ethernet,lan,C++,Arduino,Ethernet,Lan,这就是我的情况:我有一个交换机和两个连接有以太网屏蔽的Arduinos,它们都运行一个简单的(测试)web服务器程序。我的电脑也连接到交换机,所以我可以向Arduinos发送请求。这是Arduino程序(只有第二个Arduino上的IP地址不同): #包括 字节mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}//以太网屏蔽mac地址 字节ip[]={192,168,0,11};//局域网中的arduino IP 字节网关[]={192,168,0,1};//通过路由器访

这就是我的情况:我有一个交换机和两个连接有以太网屏蔽的Arduinos,它们都运行一个简单的(测试)web服务器程序。我的电脑也连接到交换机,所以我可以向Arduinos发送请求。这是Arduino程序(只有第二个Arduino上的IP地址不同):

#包括
字节mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}//以太网屏蔽mac地址
字节ip[]={192,168,0,11};//局域网中的arduino IP
字节网关[]={192,168,0,1};//通过路由器访问互联网
字节子网[]={255,255,255,0}//子网掩码
以太网络服务器(80)//服务器端口
无效设置(){
//启动以太网
以太网开始(mac、ip、网关、网关、子网);
server.begin();
}
void loop(){
EthernetClient=server.available();
如果(客户){
int nrOfCharacters=0;
字符串msg=“”;
while(client.connected()&&client.available()){
char c=client.read();
连续打印(c);
nrOfCharacters++;
如果(c='\n'| | nrOfCharacters>=6&&c='')
{
httpResponse(客户,msg);
}
else if(nrOfCharacters>=6){
msg+=c;
}       
}
}
}
无效httpResponse(EthernetClient客户端,字符串消息)
{
client.println(“HTTP/1.1200ok”);
client.println();
client.print(msg);
client.stop();
}
一个Arduino的IP地址为192.168.0.10,另一个的IP地址为192.168.0.11

一切正常,请求处理得很好,但当我向一个Arduino发送请求,然后再向另一个发送请求时,第二个Arduino超时,然后它再次工作。我几乎可以一次又一次地完美地再现这个问题

我曾尝试使用在线找到的方法检查Arduinos上的套接字状态:

byte socketStat[MAX_SOCK_NUM];

void ShowSockStatus()
{
  for(int i = 0; i < MAX_SOCK_NUM; i++) {
      Serial.print(F("Socket#"));
      Serial.print(i);
      uint8_t s = W5100.readSnSR(i);
      socketStat[i] = s;
      Serial.print(F(":0x"));
      Serial.print(s, 16);
      Serial.print(F(" "));
      Serial.print(W5100.readSnPORT(i));
      Serial.print(F(" D:"));
      uint8_t dip[4];
      W5100.readSnDIPR(i, dip);
      for(int j = 0; j < 4; j++) {
        Serial.print(dip[j], 10);
        if(j < 3) Serial.print(".");
      }
      Serial.print(F("("));
      Serial.print(W5100.readSnDPORT(i));
      Serial.println(F(")"));
  }
  Serial.println("");
}
byte socketStat[MAX_SOCK_NUM];
void ShowSockStatus()
{
对于(int i=0;i
但我没有发现任何问题。我还检查了调用
loop()
方法时是否存在“hickup”,但也没有问题

我怀疑这与发送到一个Arduino的数据在另一个Arduino上也被接收有关,导致了一些问题,但我对网络交换机的工作原理并不十分熟悉


有人有办法解决这个问题吗?

只有第二个Arduino上的IP地址不同,您也应该有不同的MAC地址

只有第二个Arduino上的IP地址不同,您也应该有不同的MAC地址

@JarrodRoberson很好,这可能就是发生的情况-switch意识到这台mac电脑连接到了哪里,并且不会向另一台提供数据。仅供参考:@JarrodRoberson你刚刚让我开心了一天。。非常感谢你。更改了MAC地址,BAM,没有问题了。@Jarroderson很好,这可能就是发生的情况-switch意识到此MAC连接到哪里,并且不会向另一个MAC发送数据。仅供参考:@Jarroderson你刚刚让我开心了一天。。非常感谢你。更改了MAC地址,BAM,没有问题了。
byte socketStat[MAX_SOCK_NUM];

void ShowSockStatus()
{
  for(int i = 0; i < MAX_SOCK_NUM; i++) {
      Serial.print(F("Socket#"));
      Serial.print(i);
      uint8_t s = W5100.readSnSR(i);
      socketStat[i] = s;
      Serial.print(F(":0x"));
      Serial.print(s, 16);
      Serial.print(F(" "));
      Serial.print(W5100.readSnPORT(i));
      Serial.print(F(" D:"));
      uint8_t dip[4];
      W5100.readSnDIPR(i, dip);
      for(int j = 0; j < 4; j++) {
        Serial.print(dip[j], 10);
        if(j < 3) Serial.print(".");
      }
      Serial.print(F("("));
      Serial.print(W5100.readSnDPORT(i));
      Serial.println(F(")"));
  }
  Serial.println("");
}