le stringhe anno potenzialmente lunghezza infinita. Non so come lavora lo shield, ma in teoria ilpacchetto TCP arriva con un MTU noto (lughezza massima del pacchetto, quindi un messaggio più lungo viene spezzato in più pacchetti, e può capitare che venga spezzato in pacchetti più picoli se una parte della rete usa MTU più piccoli). normamente l'MTU è di 1500byte, quindi credo che sia infattibile di base per l'arduino.
non usare endsWith ma leggi byte per byte, considerando che stai implementando a partire dal TCP, ti convene creare un tuo protocollo, e quindi decidi tu la lughezza massima e vari altri parametri. Internet è una brutta bestia, devi fare molta attenzione se esci dalla rete locale.
Il mio approccio in questi casi è chiudere la connessione al minimo errore.