CENG 564/463 Network Programming



Fatih University, Computer Engineering Department
Fall Semester 2003
Wednesday, 9:00 - 12:00, E303

Instructor: Halûk Gümüşkaya Teaching Assistant: Nasif Ekiz
Office: EA301 Office: EA-202
Office hours: Tue 13-14, Wed 14-15, Thur 15-16 Office hours:
Office phone: 0.212.889 0810-1036 Office phone: 1026
e-mail: haluk@fatih.edu.tr e-mail: nekiz@fatih.edu.tr
Mostly Static Information: Mostly Dynamic Information:
bulletCourse Description
bullet Lecture Announcements
bullet Prerequists

Homeworks, Lecture Notes

bullet Lecture Schedule

Project Page

bullet Textbooks


bullet Tools and Development Environments
bullet Grades
bullet Academic Integrity

Course Description

This course teaches how to design and implement network programs, protocols and systems in a distributed environment under TCP/IP using the Java programming language. The course tries to give some hands-on experience as well as some theoretical background. We will use the Internet and the Web as our test beds, and Java as our programming language.

The following topics are presented in the course: Communication models of network programs, concurrency and concurrent programming, patterns for concurrent and networked objects, Java I/O streams, Java net package and introduction to network programming with high level classes, TCP socket programming, UDP socket programming, multicast communication model and multicast sockets, accessing network databases with JDBC, distributed applications with RMI, Java web programming, servlets, JSP, Java based wireless applications development and J2ME, security in network applications and introduction to EJB.

The course will involve programming assignments, one midterm, a project, and a final exam. All programming is in Java. Students will conduct and present in-depth programming assignments and a project using distributed and concurrent software design techniques (design patterns), contemporary software development processes (like XP), tools (Together 6.1, JBuilder 9, MySQL, ...) , notations (like UML).


CENG 564/463 is an advanced undergraduate course and also is a graduate course. We will be covering topics from a number of other courses: CENG 102 Computer Programming (Java programming language), CENG 362 Computer Networks, CENG 217 Object Oriented Programming, CENG 341 Operating Systems and CENG 302 Software Engineering. You will be required to understand a lot of diverse material and apply it in network programs. It also does require a high level of Java programming skills.

Lecture Schedule

Week Topics Covered


Introduction to Network Programming and Communication Models of Network Programs
Communication primitives: send and receive operations, communication models: client/server, peer-to-peer, group multicast and mobile agent, two, three-tier and multi-tier client/server architectures, concurrent processing in client/server software.


Concurrency and Concurrent Programming
What is a Thread, Multiprocessing and Multithreading, Thread Structure and Thread Creation, The Life Cycle of a Thread: Thread States, Thread Scheduling and Priority.


Concurrency and Concurrent Programming (Continued)
Multithreaded Programs and Synchronizing Threads, Basic Synchronization Strategies, Extending the Threading Model, Producer-Consumer Problem, Deadlock Problem, Patterns for Concurrent and Networked Objects (not given in this semester).


Building Blocks of Networking: Java I/O Streams
Stream Basics, Stream Types, Byte and Character Streams, I/O Exceptions, Data Sink Streams, Data Processing Streams, Object Streams and Object Serialization.


Java Net Package and Introduction to Network Programming with High Level Classes
Introduction to Java Net (java.net) Package, InetAddress Class, URL Class, Communication Using, URLConnection, JavaMail API.


TCP Socket Programming: Introduction, Socket Class, ServerSocket Class, Iterative Connection-Oriented Client/Server Applications, Concurrent Connection-Oriented Client/Server Applications, A Chat Program Example.


UDP Socket Programming: UDP Protocol and UDP Datagram, UDP and TCP Comparison, Java UDP Support, UDP Based Client/Server Design, UDP Application Samples.


Introduction to Distributed Computing: Remote Method Invocation (RMI) (1): Introduction to Distributed Computing, RMI System Architecture, Developing an RMI Application.


Introduction to Distributed Computing: Remote Method Invocation (RMI) (2): RMI Architectural Details, Parameters in RMI, Building a Generic Compute Engine, Dynamic Class Loading, Creating a Peer-to-Peer RMI Application, A 3-tier RMI-JDBC Application.


An Overview of Enterprise Applications Development Using J2EE Platform: Distributed Multitiered Applications, J2EE Platform Architecture, Enterprise JavaBeans (EJBs) Overview, J2EE Platform Software Development Kit (J2EE 1.4 SDK), J2EE vs. .NET.
11 Midterm Exam
12 Projects Meetings
13 Projects Meetings
14 Projects Demo (7-9 January 2004)


There is no single textbook that adequately covers such a diverse range of topics that are taught in this course. Buying multiple textbooks is clearly not very appealing financially. I therefore will try to prepare my own lecture handouts and slides available as course notes and they will be available at the photocopy center or on the web site of the course. Here are some textbooks that are helpful for various parts of the course:

Main References (for technology part of the course)


Advanced Java 2 Platform, How to Program, H. M. Deitel, S. E. Santry, P. J. Deitel, 1811 pages, Prentice Hall,  2002.


Java Ağ Programcılığı, H. Gümüşkaya, Ö. Boyacı, ALFA, 2003.

References (for theory part of the course)


Distributed Systems, Concepts and Design, Third Edition, 772 pages, G. Coulouris, J. Dollimore, T. Kindberg, Addison Wesley, 2001.


Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects, D. C. Schmidt, M. Stal, H. Rohnert and F. Buschmann, Wiley & Sons, 2000.


Java in Distributed Systems, Concurrency, Distribution and Persistence, M. Boger, 414 pages, John Wiley, 2001. 

Other References


Beginning Java Networking, C. Darby, J. Griffin, …, 900 pages, Wrox Press, 2001.


An Introduction to Network Programming with Java, J. Graba, 374 pages, Addison Wesley, 2003.


Java Network Programming (2nd edition), E. R. Harold, 731 pages, O’Reilly, 2000.


Java Network Programming (2nd Edition), M. Hughes, C. Hughes, M. Shoffner, D. Hamner, Manning Publications, 807 pages, 1999.


Java I/O, E. R. Harold,  596 pages, O’Reilly, 1999.

Tools and Development Environments


Together for JBuilder 6.1 (modeling, design and documentation tool)


Builder 9 (implementation tool)


MySQL (for database applications)

Grading (tentative)

15 % : Homework Assignments  
30 % : Project  
25 % : Midterm (near the middle of the course)
30 % : Final Exam (a comprehensive exam at the end of the course)

Homework: There will be homework in every 2 or 3 weeks. The purpose of the homework is to give you a chance to exercise the knowledge gained from the recent class material.

Attendance: Attendance is important in order to learn the topics in a timely manner. Attendance will be forced by taking attendance and by making quizzes at random times.

Quizzes: There will be short quizzes at random times. We may not inform you about the quizzes. A quiz may be done at any time during a lecture period.

Project: The project is very important for a course of this kind.

Midterm Exam: There will be one midterm exam that will be given around the mid of the semester.

Final Exam: There will be one final exam that will be given during final exams period of the semester.

Academic Integrity

We will be very careful in grading the projects, homeworks, exams so that everybody gets the grade that he/she deserves. Copying will not be tolerated and will be checked and punished rigorously.

The Fatih University has a very strict policy on academic dishonesty. All work on homeworks and examinations must be strictly individual.  Violations of this policy will result in an F grade for the class and may result in suspension/expulsion from the university.