UDP is nice because it can function fine unidirectionally. This is my favorite kind of networking with most people. This is also nice for realtime periodic communications. It's really IP datagrams with a tiny thin layer to support "ports" which allow multiplexing and multiple streams between IP peers.
TCP is also nice and is appropriate if you need to losslessly move a stream of data efficiently. It uses ad-hoc, heuristic, methods to deal with congestion, latency and other complex issues so it isn't perfect. But it works quite well in practice across extremely widely diverse scenarios. It's main feature is something called the "handshake" (the analogy eludes me) which some people feel is slightly controversial.
To network with non-hacker types, very small children, lawyers and other invertibrates, you might need to use a higher level protocol based on one of these. Things like RTP, SSH, UUCP, or NNTP spring to mind. I dislike SMTP and HTTP, however, and you should avoid those at all cost.