I've started working through Richard Steven's Unix Network Programming vol 1 after being away from coding in C for quite some time. I find the Stevens book extremely detailed (a good thing) and slow going (not so good). I've begun to realize that I would have to work on a medium sized project to sustain interest in this (This is a purely personal learning exercise). I'm looking for project ideas - I've thought of some like -

* Bittorrent client
* Simple web server
* Simple web client like wget
* A P2P file transfer system

Can you suggest any others? Are these too complicated as beginner projects? I have programming experience of around 6 years, but not in C.

link|improve this question
Thank you everyone - all suggestions are great. I can't vote up yet - will do once I reach 15. – learnerseekerdoer Jan 26 '11 at 2:55
I've a host of ideas now :) - I'll start with the email client, then an XMPP client, and then the webserver. Thanks! – learnerseekerdoer Jan 26 '11 at 7:38
feedback

closed as not constructive by ChrisF Nov 23 '11 at 11:07

This question is not a good fit to our Q&A format. We expect answers to generally involve facts, references, or specific expertise; this question will likely solicit opinion, debate, arguments, polling, or extended discussion. See the FAQ for guidance on how to improve it.

7 Answers

up vote 6 down vote accepted

I started working on a chat server like IRC once. I haven't had much time to work on it, but it seems like it would have a lot of good networking concepts as well.

Instead of just having client and server communicating on one channel, you need to have the server receive a message and then broadcast it to all other connections.

link|improve this answer
+1 Me two. I found that it exercised a lot of networking principles. – Loki Astari Jan 25 '11 at 18:34
I'll probably take this just for the broadcasting aspect. +1 when I get to 15. – learnerseekerdoer Jan 26 '11 at 7:39
Thanks, but you can mark the answer as accepted instead of +1. – jonescb Jan 26 '11 at 15:10
feedback

If you really want to gain a better understanding of networking, one of my last quarters of undergraduate our assignment was to implement a basic TCP protocol using the UDP protocol. This way you are 1. learning/gaining experience in C, 2. learning networking programming in C and 3. gaining a better understanding of how the TCP stack works.

link|improve this answer
Very interesting. Thanks. – learnerseekerdoer Jan 26 '11 at 7:34
feedback

An email client may be a good choice - the relatively simple protocol allows you to focus more on the network side of the program.

link|improve this answer
feedback

A simple web server which only serves static pages and only supports HTTP 1.0 would not be to complex I think. It will give you some knowledge about stateless server programming. Parsing URLs will be a bit of a hassle, so you may want to consider a separate lib for that.

link|improve this answer
As I mentioned in another comment, this sounds like a good idea - something that I would be interested in. – learnerseekerdoer Jan 26 '11 at 7:36
feedback

How about a very simple chat program (peer-to-peer)? We had to do that in university, it wasn't as hard as it sounds and if it's going well there's lots of other features you can add.

link|improve this answer
feedback

I've always wanted to implement an instant messaging service. So that's my suggestion:

  • Implement an IM client and server using your own protocol.
  • Or implement an XMPP (Jabber) client.
link|improve this answer
I'll try the XMPP client too - thanks! – learnerseekerdoer Jan 26 '11 at 7:35
feedback

A web server would be an excellent choice. You can work on your networking understanding, multi-threading (if you go that route), and really learn the innards of how HTTP works. Not just serving pages up, but posting data, authentication, etc. I think you'd find it a very valuable experience, especially if you are a web programmer. After that, its not that difficult to support CGI apps/PHP/etc at a basic level.

link|improve this answer
I do work with web technologies, and this sounds good. I'll start simple, and then maybe work upwards to non-blocking I/O. – learnerseekerdoer Jan 26 '11 at 7:35
feedback

Not the answer you're looking for? Browse other questions tagged or ask your own question.