Mega 2560 Ethernet connection - unreliable connections

You should use cStrings - ie null terminated char arrays

--> instead of String readString; you would have a char readString[100];
--> instead of readString += c; you would need to maintain an index in the array where to store the character (and a trailing null char) and you need to check you are still within bounds (ie if the array can hold 100 char, as you need to keep one for the trailing '\0' you can only store 99 elements - from index 0 to 98)
--> instead of readString.indexOf() you need to use the cString [url=http://www.cplusplus.com/reference/cstring/strstr/]strstr()[/url] function (see what exists in stdlib.h or string.h)

the String class can poke holes in your memory and after a while there is no memory left for allocation when you do readString += c;... When you see erratic behavior on a program, that could be a cause... Not saying this is your problem, but could be