Abstract: | This paper describes the delivery of a computer networks course with accompanying materials and software. The course is offered at the fourth-year undergraduate level, and has few formal pre-requisites, other than general programming skills. There is a substantial architectural and coding component to any practical course on networks, and it is important to challenge the experienced and knowledgeable students without making the material too difficult for the inexperienced students who have minimal experience in programming practical applications. Some students have an industrial background and are expecting to build practical working applications. At the other extreme are students with no exposure to operating system principles, and therefore lacking pertinent knowledge, such as concurrency concepts. Our programming framework provides an event-polling approach to avoid the complexity of more general concurrency techniques. Protocol layers are implemented with data types and use a finite state machine model to control their behaviors. The resulting course offers code structure and support to students with minimal background, without sacrificing pertinent concepts, and provides the ability to construct elaborate network applications using the coding structures introduced in the course. |