You have two choices:
- Configure terminal for character echo and program simply accepts characters.
- Configure terminal for no echo, and have the program echo everything it receives.
An over simplification because in a mature implementation, some control characters aren't echoed.
I prefer application controlled echo because it doesn't send "blindly". The characters you see must have been received and processed.