soleilsword:
Since they're in a for loop which executes only once, and the reception of data will occur only after these two commands,
It seems a strange way to get something to happen once. Why not use IF ? And using the name 'k' for such an important control variable is a recipe for late nights and gallons of coffee when you come back to the program in 6 months time. Why not call it messageRequested and begin with it set to false?
And it seems to me that you could only ever receive a single message that way - in your earlier examples I thought the problem was with the 3rd or 4th message.
I suspect if the first print takes too much time before finishing, and if the second data is larger than the serial buffer size, overflows of data will happen before they are read.
The way the code is written it will only send data after a complete message is received, so sending should not interfere with receiving.
Unless, of course, the sender starts sending the second message without being asked - but i presume that does not happen unless you send another "+++"
I should say that I have no experience of the Zero so I can't say if there are any issues that may be particular to it. However I would expect it to perform better than an Uno or Mega.
...R