For any normal bus devices use mode N2km_NodeOnly or N2km_ListenAndNode. N2km_ListenAndNode has extra feature for simple data forwarding to forward stream so that you do not need to write handler function and print message data e.g. text or actisense format. Other modes are for special cases like being invisible on bus.
Both mentioned modes can read and sent messages. For handling received messages you need to call
NMEA2000.SetMsgHandler(HandleNMEA2000Msg);
and write HandleNMEA2000Msg handler function as in e.g. in example DataDisplay.ino. Note that example uses default mode, which makes it invisible on bus, but you can still send messages to bus as normally with NMEA2000.SendMsg(). That is not prefered, since normally MFD:s requires devices are registered right on the bus.
So in conclusion, if you take e.g. TemperatureMonitor as base and add NMEA2000.SetMsgHandler(HandleNMEA2000Msg); to it, you have rigth device for listen and sent. Note that as in TemperatureMonitor we define messages we are going to transmit with
const unsigned long TransmitMessages[] PROGMEM={130310L,130311L,130312L,0};
...
NMEA2000.ExtendTransmitMessages(TransmitMessages);
You have to do the same for messages you are going to receive:
const unsigned long ReceiveMessages[] PROGMEM={127505UL,0};
...
NMEA2000.ExtendReceiveMessages(ReceiveMessages);
Note also that if you are going to send or receive proprietary fast packet messages, you have to tell system those otherwise library handles them as single framed messages:
const unsigned long ExtraFastPacketMessages[] PROGMEM={126720L,0};
...
NMEA2000.ExtendFastPacketMessages(ExtraFastPacketMessages);
Take also care that you use board with enough memory. Arduino Mega can handle small systems, but also runs easily out of memory. You will see it, when it does not run at all.