Olá pessoal,
Estou com um problema a um tempo que é implementar um cliente telnet que irá enviar mensagens de controle a um servidor, juntamente com um servidor web que recebe configurações via web.
O servidor de configurações funciona, já o cliente telnet não. Não conecta a servidor nenhum. Segue trechos do código:
declarações globais
// VARIAVEIS GLOBAIS ============================================================================
const char teste[] PROGMEM = "<svgabcammsg><svgabcamid>RCJS1086701</svgabcamid><svgabcamop>svgabcam_keepalive</svgabcamop><svgabcamseq>1000</svgabcamseq><svgabcamcamstatus1>svgabcamcamstatus_online</svgabcamcamstatus1><svgabcamcamstatus2>svgabcamcamstatus_online</svgabcamcamstatus2><svgabcamcamstatus3>svgabcamcamstatus_offline</svgabcamcamstatus3><svgabcamcamstatus4>svgabcamcamstatus_offline</svgabcamcamstatus4><svgabcamcamstatus5>svgabcamcamstatus_not_registered</svgabcamcamstatus5><svgabcamcamstatus6>svgabcamcamstatus_not_registered</svgabcamcamstatus6></svgabcammsg>";
PROGMEM const char * const test_msg[1] = {teste};
char buffer_msg[512];
String serialCode;
int seq = 1;
const unsigned int MAX_INPUT = 500;
const int MAX_PARAM = 15;
char buffer[256];
// Shield
uint8_t mac[6] = {0xAB, 0xCD, 0x12, 0x34, 0xFF, 0xCA};
uint8_t ip[4] = {};
uint8_t mask[4] = {};
uint8_t gateway[4] = {};
uint8_t domain_server[4] = {};
// IPs dos Dispositivos para teste
uint8_t disp1[4] = {};
uint8_t disp2[4] = {};
uint8_t disp3[4] = {};
uint8_t disp4[4] = {};
uint8_t disp5[4] = {};
uint8_t disp6[4] = {};
uint8_t disp7[4] = {};
uint8_t disp8[4] = {};
uint8_t disp9[4] = {};
uint8_t disp10[4] = {};
// Cliente telnet
IPAddress server_msg(187, 79, 182, 109);
EthernetClient client;
// Configuracoes de PING
SOCKET pingSocket = 0;
ICMPPing ping(pingSocket, (uint16_t)random(0, 255));
// Porta do servidor WEB
EthernetServer server(80);
// Configuracoes dos dispositivos
int statusdisp[10] = {};
int saidadisp[10] = {};
// Controle de reboots
int inc_reboot[22] = {0, 3, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 100, 150, 200, 300, 400, 500};
int reboot_disp1[3] = {};
int reboot_disp2[3] = {};
int reboot_disp3[3] = {};
int reboot_disp4[3] = {};
int reboot_disp5[3] = {};
int reboot_disp6[3] = {};
int reboot_disp7[3] = {};
int reboot_disp8[3] = {};
int reboot_disp9[3] = {};
int reboot_disp10[3] = {};
// Controle de saidas de alimentacao
int saida_disp1 = 0;
int saida_disp2 = 0;
int saida_disp3 = 0;
int saida_disp4 = 0;
int saida_disp5 = 0;
int saida_disp6 = 0;
int saida_disp7 = 0;
int saida_disp8 = 0;
int saida_disp9 = 0;
int saida_disp10 = 0;
// Configuracao de Threads
ThreadController cpu;
Thread threadWeb;
Thread threadPing;
Thread threadMsg;
Setup
void setup() {
pinMode(saida1, OUTPUT); // Configura pino 6 como saida
digitalWrite(saida1, LOW); // Carrega pino 6 com nivel logico baixo
pinMode(saida2, OUTPUT); // Configura pino 7 como saida
digitalWrite(saida2, LOW); // Carrega pino 7 com nivel logico baixo
pinMode(saida3, OUTPUT); // Configura pino 8 como saida
digitalWrite(saida3, LOW); // Carrega pino 8 com nivel logico baixo
pinMode(saida4, OUTPUT); // Configura pino 9 como saida
digitalWrite(saida4, LOW); // Carrega pino 9 com nivel logico baixo
pinMode(saida5, OUTPUT); // Configura pino 5 como saida
digitalWrite(saida1, LOW); // Carrega pino 5 com nivel logico baixo
pinMode(ledvd, OUTPUT); // Configura pino 1 como saida
digitalWrite(ledvd, LOW); // Carrega pino 1 com nivel logico baixo
pinMode(ledam, OUTPUT); // Configura pino 2 como saida
digitalWrite(ledam, LOW); // Carrega pino 2 com nivel logico baixo
Serial.begin(9600); // Velocidade da comunicacao serial
setup_EEPROM();
Ethernet.begin(mac, ip, domain_server, gateway, mask);
server.begin();
threadWeb.setInterval(200); // Configura o intervalo em que a thread do servidor WEB ira rodar
threadWeb.onRun(server_page); // Indica a funcao que sera executada
threadPing.setInterval(30000); // Configura o intervalo em que a thread do ping ira rodar
threadPing.onRun(disp_test); // Indica a funcao que sera executada
threadMsg.setInterval(5000); // Configura o intervalo em que a thread da mensagem ira rodar
threadMsg.onRun(send_msg); // Indica a funcao que sera executada
cpu.add(&threadWeb); // Configura o should run da thread do servidor WEB
cpu.add(&threadPing); // Configura o should run da thread do ping
cpu.add(&threadMsg); // Configura o should run da thread de envio da mensagem
wdt_disable();
delay(5000);
if (client.connect(server_msg, 60444)) {
Serial.println("conect");
} else {
Serial.println("desconect");
}
Serial.println(Ethernet.localIP());
}
Envio da mensagem
// Envia keep alive =============================================================================
void send_msg() {
Serial.println("KEEP ALIVE");
if (client.connect(server_msg, 60444)) {
Serial.println("conect");
strcpy_P(buffer_msg, (char*)pgm_read_word(&(test_msg[0])));
client.println(buffer_msg);
while (client.connected()){
while (client.available() > 0) {
char c = client.read();
Serial.print(c);
}
}
} else {
Serial.println("desconect");
}
client.stop();
}