Replacing Processing internally within Arduino

#define CLK 10
#define OE  11
#define LAT 12
#define A   A8
#define B   A9
#define C   A10
#define D   A11
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false);

You have your matrix connected to the SPI pins that the Arduino uses to communicate with the Ethernet shield.

Sorry can you elaborate on this, I am quite new to coding Arduino so am not totally sure what you mean:

"This is REALLY ridiculous - taking a global char array containing the data and wrapping it in a String object just so that the function can have something to return."

You have a function, readPage() that collects data into a global array, inString. Does that function need to return anything, when the data is already in a global place? No, it does not. But, you have it wrap the data in an instance of a class that is known to have problems.

That function is only called by connectAndRead(), which doesn't do anything with the data that was read. It simply returns the object that was created to wrap the global data.

The connectAndRead() function is called in two places. Each of them simply prints the data that is returned somewhere (to the serial port or to the matrix). In both of those cases, the data has to be extracted from the wrapper, so the overhead of passing global data wrapped in a leaky mess is completely unnecessary.