If I use one serial port it doesn't work unless it also uses software serial

That's what I thought when I read @camsysca posting.
Best thing would be if you have a start-marker and and end-marker.
With start/end-marker you can start reading at any byte even in the middle of a message.
Any truncated message will be read-out from the buffer and will be thrown away.

Then if the next message arrives and really starts with the constant start-marker correct receiving begins and ends if the end-marker is read.

There is a tutorial about that written by robin2

best regards Stefan