lNet is much easier to use because of event handlers, built-in threading, and LCL components implementing lots of operations on sockets. However, it has very basic functionality and, for me, it's usable only for very simple communication. Synapse is the most powerful network library, which allows you to take much better control over your sockets, but it's harder to use - you need to know a bit how the network sockets work, and you need to code in your own a lot of things done automatically by lNet, like threading, etc. When I began network programming with Delphi, I used TServerSocket and TClientSocket components, so when I moved to Lazarus I began to use lNet, because it was very similar to my old components. But later such 'all-in-one' network components weren't functional enough for me, so I learned Synapse. Now I use Synapse in every project.