Though you could say this problem is a fairly basic one, this was always a question I had difficulty with during school, and I felt that I never got a clear answer. Having now spent a year in France, I will do my best to explain.
Fundementally, 'bon' is an adjective and 'bien' is an adverb. That is, if you want to say a 'good book' you would say 'bon livre' or a 'bonne glace' for 'good ice cream' (here we use bonne as glace is a feminine word).
On the other hand, you might say 'tu cuisines bien' (you cook well) 'il a bien joué' (he played well). Here bien is the adverb of the sentence, and can be translated as 'well'.
One difficult more specific difference between the two words is comparing 'c'est bon' and 'c'est bien'. If you go to France you will probably hear these two expressions a lot, and it's important to understand the difference between them.
'C'est bien' is easier to directly translate into English, it simply means 'that's good'. So, for example, you might after someone gets a good grade, you'll tell them 'c'est bien'. Or if you've just enjoyed a nice holiday and somebody asks you how it was, you might say 'yeah it was good', i.e. 'oui c'était bien' (c'est bien in the imperfect).
'C'est bon' on the other hand can be roughly translated as 'it's fine' or 'that's ok'. For example, when offered help from someone, you would say 'c'est bon' as in 'that's ok (don't worry)'. Or if you're at a shop and the shopkeeper is giving you a quantatiy of fruit, you would say 'c'est bon' ('that's fine/enough') to tell him to stop. Bon can also be associated with physical senses, so if you want to compliment a meal, you would say 'c'est très bon' for 'it's very tasty'.
As I said, the difference between 'bon' and 'bien' is very difficult to define clearly, but I hope I've given you a better understanding of it.