Создание 2 клиентов TCP

я выложил код библиотеки - там надо смотреть проблему - клиенты с одинаковым IP и разными портами на ардуине объединяются.
код на ардуине не может объединять двух клиентов, объявленных отдельно.

Ну, если Вы лучше нас знаете где нужно смотреть проблему, то и смотрите! К нам-то зачем пришли? Мы люди тупые, мы смотреть проблемы без кода не можем.

Про необходимость кода я Вам намекнул в самом первом ответе темы. Вы не поняли? Альтернативно одарены?

То, что

это не наша проблема. Очень большой никто разбирать не будет!

Сделайте маленький пример, где просто создаются два клиента и ничего другого. Если проблема там присутствует, то вот это маленький код и выкладывайте, но полный, законченный, чтоб любой мог загрузить его себе, запустить и посмотреть.

Да, это работа! Но это работа по решению Вашей проблемы. Вы думали, кто-то за Вас её делать будет?

1 лайк

вот проект

тут задаются адреса 2 точек, и далее, порты

byte mainip[] = { 192, 168, 1, 39 };
byte deip[] = { 192, 168, 1, 39 };

при подключении одного из клиентов к источнику данных, второй тоже начинает себя считать подключенным.
да и данные начинает на себя принимать вместо другого клиента

#include <Ethernet.h>
#include "GyverTimers.h"
#define ledPin 13

const uint8_t gateway[] = {192, 168, 001, 001};
const uint8_t subnet[] = {255, 255, 255, 0};
const uint8_t dns[] = {192, 168, 001, 001};
byte mainip[] = { 192, 168, 1, 39 };
byte myip[] = { 192, 168, 1, 63 };
byte deip[] = { 192, 168, 1, 39 };
byte mac[] = { 0xD2, 0x12, 0x1E, 0xEF, 0xFE, 0xEA };  //не ставим стандартный мак
uint8_t linkstate = 0;
uint16_t myPort = 2445;
uint16_t dePort = 6643;
uint16_t mainPort = 4555;
const byte DeviceType = 2;
unsigned long timer2 = 0;
unsigned long cicle = 0;
EthernetClient clientcentr;
EthernetClient clientwork;

void setup() {
  Serial.begin(115200);
  Serial3.begin(115200);
  pinMode(ledPin, OUTPUT);
  Serial.println("поехали !!!");
  Ethernet.init(53);     
  Ethernet.begin(mac, myip);
  Timer1.setFrequency(1);
  Timer1.enableISR();     // Первый канал - А, начальная фаза - 0 градусов
  Timer2.setFrequency(1);
  Timer2.enableISR(CHANNEL_A); 
}

ISR(TIMER1_A) 
{
    //Serial.println("Timer 1");
   /* if (hiStepGra)
    {
      digitalWrite(stepPinGra, HIGH);
      hiStepGra = false;  
    }
    else
    {
      digitalWrite(stepPinGra, LOW);
      hiStepGra = true;
    }
    /*/
}
ISR(TIMER2_A)                    
{
    if (++timer2 < 250)
      return;
    else  
      timer2 = 0;                            
    if (linkstate != 1)
    {
        Serial.println("сетевой кабель не подключен");
    }
    else
    {
        digitalWrite(ledPin, digitalRead(ledPin) ^ 1);  
        if (!clientwork.connected())
        {    
            //Serial.println("подключаю central");
            clientwork.connect(mainip, mainPort);
            delay(50);
            if (clientwork.connected()) {
                Serial.println("connected to work");
                
            } else {
                for (byte i = 0; i < 4; i++)
                {
                  Serial.print(mainip[i]);
                  if (i < 3)
                    Serial.print(".");
                  else
                    Serial.print(":");
                }
                Serial.print(mainPort);
                Serial.println(" connection work failed");
            }
        }
        if (clientwork.connected())
        {    
            byte buf[12] = {0};
            buf[0] = 34;
            for (byte i = 1; i < 7; i++)
            {
              buf[i] = mac[i - 1];
            }
            buf[7] = DeviceType;
            buf[8] = 47;
            buf[9] = 101;
            buf[10] = 110;
            buf[11] = 100;
            clientwork.write(buf, 12);
            for (byte i = 0; i < 4; i++)
            {
              Serial.print(myip[i]);
              if (i < 3)
                Serial.print(".");
              else
                Serial.print(":");
            }
            Serial.print(myPort);
            Serial.println(" Отправил пинг work");
        }
        if (!clientcentr.connected())
        {    
            //Serial.println("подключаю central");
            clientcentr.connect(deip, dePort);
            delay(50);
            if (clientcentr.connected()) {
                Serial.println("connected to work");
                
            } else {
                for (byte i = 0; i < 4; i++)
                {
                  Serial.print(deip[i]);
                  if (i < 3)
                    Serial.print(".");
                  else
                    Serial.print(":");
                }
                Serial.print(dePort);
                Serial.println(" connection clientcentr failed");
            }
        }
        if (clientcentr.connected())
        {    
            byte buf[12] = {0};
            buf[0] = 34;
            for (byte i = 1; i < 7; i++)
            {
              buf[i] = mac[i - 1];
            }
            buf[7] = DeviceType;
            buf[8] = 47;
            buf[9] = 101;
            buf[10] = 110;
            buf[11] = 100;
            clientcentr.write(buf, 12);
            for (byte i = 0; i < 4; i++)
            {
              Serial.print(myip[i]);
              if (i < 3)
                Serial.print(".");
              else
                Serial.print(":");
            }
            Serial.print(myPort);
            Serial.println(" Отправил пинг clientcentr");
        }
    }
    digitalWrite(ledPin, digitalRead(ledPin) ^ 1);  //включаем и выключаем светодиод
}

void loop() {
    if (cicle + 3000 < millis())
    {
        cicle = millis();
        if (clientcentr.connected())
            Serial.println("clientcentr подключен");
        if (clientwork.connected())
            Serial.println("clientwork подключен");
    }

}

Вся вот эта борода в ISR уже плохая идея.

без разницы, что так, что так. Везде одинаково