Dear @Calvin_Stu , just a couple of comments:
PrintSerial appends a \n character to the string sent, therefore your Arduino receives a newline as 'string' terminator; while Serial.Write sends the raw data without appending the \n.
So, as @ABG has already said, please take care of what Arduino is looking for: a character or a byte ?
Because the \n character received by Arduino can foolish the search for the equalitity : '9'\n isn't '9' (character) nor 9 (numerical).
As far as the Arduino disconnection-reconnection is concerned (i.e. Arduino power off/on), most probably when the power returns 'on' you have also to restore the communication on App side. For example, when I use a BT communication between apps and Arduino, to avoid the "stuck on disconnected" situation, I use an handshake method. This means that every X seconds Arduino sends an 'alive' character (for example, a '$') to the app, the app looks for that character every 2*X seconds. If the charater is not there, this means that the communication has ceased, therefore the app decides to retry a connection. There is already a topic on that matter and you can find it in the FAQ (credits to @ABG ) here:
Maybe it's not the solution to your issue but I believe it's worth to have a look.
Best wishes.
