I'm kind of stuck at the line with all the ??????????????
I am, too. Were all those ? necessary?
delay(2); //delay to allow byte to arrive in input buffer
A load of crap!!!!!!!!
(Does the extra punctuation help? I didn't think so).
You need to read and store data until an end of packet marker arrives (the carriage return that the Serial Monitor can add is a good choice). When the end of packet marker arrives, then you send the data.