I see this a lot for new programmers trying to solve problems they get handed down too them. They freeze up and can not figure out where to start on a project. What I find that helps me out is to break the problem down into smaller project. One of the most recent ones to-date is the networking TCP and UDP code for the server and client.
So here is how I solved this problem. First the object was to create a client / server connection. So I started by researching options that would allow us to use networking on MONO.NET. As this is part of our code base to use the portal version of .NET. So I found a few API options, 3 to be clear. Researching each of these and talking to the vendors etc lead me to one of them for our own reason for the project I selected an open source one.
After that I used google, support documentation, and even youtube videos just to insure I understood what and how the normally .NET and MONO.NET differ. Trying stuff and then erasing it. Fixing one aspect then putting that code aside and trying to fix another aspect of it. Two example of this was first talking to the server and then sending a message back to the client. As I found out the client has to become a listener too but is best on a separate port. Second thing that was somewhat difficult was creating code that allowed the server to select a port to open and attach a listener to it for the new client after it first connection which in normal .NET this is easy enough but in mono with the limited ability to call networking helping API search became a constant thing for almost 2 hours of try, fail, repeat. Until... I found something that work with a bit of customization.
To summarize to figure the big picture out of getting a server / client code working I broke the problem down into small area fix it and push it aside then turn to the next issue. Figuring out where these break points out for me normally becomes a question of relationship to the project. Such as the logic for the listener is separated from the logic from the port selector. But when you put them together you get a functioning method with them both to allow you to obtain the object.