Networking-for-Arduino / EthernetENC

Ethernet library for ENC28J60. This is a modern version of the UIPEthernet library. EthernetENC library is compatible with all Arduino architectures with Arduino SPI library with transactions support. Only include EthernetENC.h instead of Ethernet.h
127 stars 28 forks source link

Problem getting http data at 256th char #33

Closed Slartitorto closed 2 years ago

Slartitorto commented 2 years ago

Hi, I have this problem getting http response from my server. After the http header, the server simply responds with a string: %ACK192168002098008008008008192168002001255255255000 This is a mark (“%”), an acknoledgment for the client and four ipaddresses; this string is done by a simple php script. Using the code below, after the mark I get: ACK19216800209800800800800819216800⸮2001255255255000 After some test, I see the junk char is -1 and it occur after 255 char retrieved. Please note that this issue does not occur using the same code but UIPEthernet library

include

include

char server_name[] = "receiver.xxx.eu";

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte static_ip[] = { 192, 168, 2, 177 }; byte static_dns[] = { 8, 8, 8, 8 }; byte static_gw[] = { 192, 168, 2, 1 }; byte static_mask[] = { 255, 255, 255, 0 };

byte server_ip[] = { 1xx, 2xx, 1xx, 141 };

EthernetClient client;

// ------------------

void setup() { Ethernet.begin(mac, static_ip, static_dns, static_gw, static_mask); Serial.begin(9600); delay(1000); }

// ------------------

void loop() { sendGET(); delay(2000); }

// ------------------

void sendGET() { char c; int counter; Serial.print(F("Connecting ... ")); if (client.connect(server_ip, 80)) { Serial.println("Connected to "); Serial.println(client.remoteIP());

client.print(F("GET /service_door.php?service=router_power_on&router_type=eth&router=000999"));
client.print(F("&lip="));
client.print(Ethernet.localIP());
client.println(F(" HTTP/1.1"));
client.print(F("Host: "));
client.println(server_name);
client.println(F("Connection: close"));
client.println();

while(client.connected() && !client.available()) delay(1); //waits for data
if (client.connected() || client.available()) { //connected or data available
  while (client.read() != '%') {}
  for (int i = 0; i < 52; i++) {
    c = client.read();
    Serial.print(c);
  }
  Serial.println();      
}  

} else { Serial.println("connection failed"); //error message if no client connect Serial.println(); } client.stop(); }

// ------------------

JAndrassy commented 2 years ago

test available() before every read(). there can be gaps in data flow.