IS 2550: Client-Server Systems

IS 2550
Fall 2006 (207-1)
CRN: 16338
Tuesday 6:00-8:50 Room 411
Michael B. Spring
Department of Information Science and Telecommunications
University of Pittsburgh
727 SIS Building
Personal Email:
Class Email:
Office Hours: Monday-Friday 8:00-6:00
Phone: 412-624-9429




Client-server systems is a course on the design and implementation of distributed software systems. At one level, client-server systems are trivial – two processes communicate across sockets that form a communications conduit over which information passes much as it would doing reads and writes from a file. At another level, the problem of working asynchronously across multiple machines can prove to be very difficult for inexperienced programmers. The fundamentals of client server systems are easiest to learn using C on Unix. Competency in C and Unix are assumed in this course. As the course progresses, work can continue in C, but most students will want to shift to Java or VB. Java is preferred. Students taking this course should brush up on their skills in C, or go back and learn C. It will also be important to develop your debugging skills in the Unix environment.


The text book for the course is an excellent, but terse, treatment of all the basic algorithms. In addition to the text students need to become conversant with the standards that have been written to define protocols such as ftp, mail, snmp, and http. The course lectures will make the assumption that students have carefully read the assigned materials and implemented the related code prior to the class meeting for which it is assigned.


The course is designed to operate in a didactic mode at the start, but to shift to problem based exploration as the term goes on. With each week, it is assumed that students will be increasingly focused on solving problems and will use class as a place in which some of the questions and issues they are facing may be addressed.

The course assumes that students are competent C programmers with a solid knowledge of the UNIX operating system. Students with limited C programming experience or minimal experience with UNIX workstations may take the course, but should anticipate spending significant additional time working to familiarize themselves with the environment during the first weeks of the course. The course will require students develop a WYSIWYG client for the final project. This will require knowledge of either Java Swing or the X Window System. The instructor will provide brief overview and introduction to Java Swing and the X Window System. Students may use other GUIs, but they should be alerted to the fact that the course will not cover variations in socket programming that are proprietary to various graphical IDE systems.  Any such variations in such systems are the responsibility of the student who chooses to work on such a system.


The course falls between a telecommunications course on protocols and a business course on end user computing. In the telecommunications course we would be concerned with optimizing the protocols used at all levels. In an end user business course, we would be concerned with the information flow within an organization. In this course, we will make the assumption that reliable transport protocols exist and will devote our attention to the issues of building reliable servers and quality clients. In addition the course will explore the issues of application protocol development as well as some of the more common client server toolkits.

The course is divided into five parts:

Course Goals

The goals of the course are to:

Course Materials

There is only one required book for the course.

Be sure you buy the BSD Sockets Version with ANSI C. Beyond this book, you will find that the online resources are more than adequate to answer all your questions. However, you should keep in mind that the process of using man pages is one that requires time itself.

There are any number of other books that may be helpful, particularly if your programming or operating system skills are weak. There are four categories of books one should consider:

A good fundamental book on C.

I like all the books on C. I would suggest either of the books below, but any solid C book will do. If you know C, you should plan to get real cozy with the man pages related to the C system calls.

It is useful to know how operating systems work. It really doesn't matter what operating system, but Unix has the advantage of being very visible. The first book below is a really good unix book -- but very expensive. You should take a look at it in the library. You might consider purchasing it if you are going to spend a lot of time working with Unix systems. The other one listed, Sobel, will help sufficiently with the mechanics of the Unix system, and is a good simple reference.

There is no particular need to delve deeper into IP protocols, but should you wish, these will be of help:

Finally, for the final project, you may want to explore either Java or Microsoft applications.  The first two books below provide good introductions to Java.  The last two provide a good introduction to Microsoft approaches.

Course Prerequisites

There are several things that you should know before you take this course. The course requires a solid knowledge of C and a good knowledge of the Unix operating system. To some extent, you can work extra hard prior to the beginning of the term to get yourself up to speed. On the other hand, you should not take this course unless you have taken data structures and the course on C and Unix. If you are a solid C programmer, you should have minimal problems picking up the amount of Java you will need for the final project in this course. One way to gauge your readiness to take this course is to ask if you can answer the following questions:

Course Mechanics

There are several things that you need to keep in mind as you work on this course. At some point you will forget one or another of these things. Try to remember that this is the place to come check for the detail again.

Regarding CASCADE:

Students are encouraged to use a system, CASCADE, the instructor developed as a part of a research project for the National Institute of Standards and Technology. The system is called CASCADE, which stands for "Computer Augmented Support for Collaborative Authoring and Document Editing." CASCADE allows users to access a document space and it provides a series of tools that make it easy to browse and interact in the space.

CASCADE is applicable in different ways to the courses I teach. For Client Server, CASCADE is a good example of a three-tier client-server application with more than 100 protocols and a sophisticated set of business rules operating on the DBMS persistent store. For document processing, it provides some sense of what a collaborative authoring system might look like. For Interactive Systems, the client provides examples of agents, visualization, and accommodation in interface design. Using CASCADE with its frailties and strengths will give you some sense of the problems inherent in designing interactive client server systems for document processing. The system can serve as a model for systems you might develop related to the final projects in my course.

       To run CASCADE:

o      (On Solaris Machines) Simply type the word cascade on the Solaris systems in the lab. You will be told the first time that some local information is being set up. You will also need to set up the server information the first time you run the system.(see below)

o      (On lab PCs) Simply select Cascade from the start menu. You may need to set up the server information each time you run the system as personal profile information is not saved (see below)

o      (On your own PC) Obtain a copy of the CASCADE client form the CASCADE web site -- It is a self extracting zip file that should install fairly easily on an Win95/98/2000/NT platform. The setup is fairly automatic. You will also need to set up the server information the first time you run the system.(see below)

       To set up server information:

o      There is a drop down combo box that allows you to set up a name, host, and port name. The name can be any string you want, host for the class accounts is "" and the port is 7000. In class, you will be provided with a username and password that will allow you to login to the CASCADE server. If you want to try to access the server before getting an account name, the account “guest” with the password “guest” provides minimal read only access..

       There are a number of ways you can learn more about CASCADE should you wish to.

o      there is an extensive online help system.

o      there is a web site which contains a lot of information about CASCADE

o      there are a series of ten videos that can be run on an PC.

Regarding Homework Submissions

Assignments emailed to the instructor should be sent to unless you have been specifically instructed to send them to my personal mail account.

There is nothing more frustrating to a student than to have homework not be graded. There is nothing more frustrating to an instructor than to have homework submitted incorrectly or with insufficient information. Before you mail an assignment to me, please make sure that it meets the specific requirements for how it is to be submitted. While there may be additional specific requirements set up in class, the following guidelines should be of help:


a.      Any paper that is submitted should be submitted in duplicate. It should be carefully proofread and formatted professionally. The paper should identify you, your email address, your social security number, the course, the term, the CRN, and the assignment for which the paper is submitted.


a.      Any project that is submitted should be thoroughly tested to insure that I will be able to run it on my machine. The project source code and executable files should both be included. The material, if it is extensive, should be zipped up in a zip or jar file. Care should be taken to make sure that all necessary supporting DBMS and lib or jar files are included. A readme file should be included that explains any particular constraints or steps that need to be taken.

b.     All code that come from any source other than your head needs to be fully and carefully marked. This includes code which you have adapted from some source but which is essentially someone else’s work. Failure to note such use is cause for a grade of 0 on the assignment and an F in the course. All of your code should be carefully and professionally commented and explained.

c.      In both the mailnote to which the project is attached and in the main file of the project, you should include:

                                                    i.     The names of all participants

                                                  ii.     Email addresses and social security numbers

                                                iii.     The course, the term, the CRN

                                                iv.     The assignment for which the paper is submitted.

Regarding Course Files:

CASCADE, will provide access to lectures, PowerPoint slides, reference documents and sample code. If you are not using CASCADE, copies of sample code is be available on in the instructor's directory. Specifically,
home/spring/cs/ or home/mbsclass/classes/2550
This directory space will contain sample code, and selected reference documents that you may find of use.

Regarding Port Numbers:

We will assign port numbers for use in building servers during one of the early classes. For now, keep in mind that they will probably be between 8000 and 9000. Port numbers over 9000 should be pretty safe for experimentation you might wish to do. For the instructor's demo code, the port number used will generally be 5127.

Regarding Active Servers:

You should use ps to determine whether a given server is running on not. The command
"ps -ef | grep prgrnm"
will tell you whether a copy of the program "prgnm" is running at any given point in time.

Course Requirements and Grading

The instructor reserves the right to modify the course requirements by administering surprise quizzes for up to 10 points or announced exams for up to 50 points if he feels that students are not pursuing a reasonable amount of course related reading and coding. Should this option be exercised, the point distribution for grades will be changed accordingly.

To give you a sense of what to expect, imagine that every point awarded for an assignment equates to .5 - 2 hours of coding/point. If you are a good coder(not great, just good), you could finish assignment 1 and do a great job in 7.5 hours. (actually, I think it would take less than 5.) If you are having trouble with C, UNIX, and reading Comer, 30 hours might be more reasonable. I will address these issues more today in class

Required Activities

Beyond these two tasks, you should be asking "How could I make this interface better?" What might you do on the client side to improve the manipulation and presentation of the results returned? What might you do on the client side to improve the structure of the records that are being stored?

As an extra credit activity you may wish as a part of this assignment to implement a system of meters for the client and server that will help to clarify performance.

You might encode each of your protocols as TLV -- Tag, length, value; thus, we have a 1 byte tag, followed by a 2 byte length, which tells us the number of bytes that follow constituting the value. Thus this protocol would allow 256 transactions, each of which could have a value of up to 64K bytes. The protocol would go on to specify the syntax rules -- e.g. each session begins with a "1" message, followed by any number of 2,3,4 messages, ending with a 255 message which signifies end of session.

As a part of this assignment, you should implement a client that presents itself graphically on the client side.  This will introduce you to the problem of event handling on client server systems.  The instructor will provide some sample code that will get you started on an X Window System interface on the client side. (Projects using JAVA/AWT, C++/MSFC, or Visual Basic client side interfaces are also acceptable. The client side socket code should use low level socket code in which you control the process.)

Final Project

The final project is worth up to 40 points - almost half of your grade. It should be a significant indication of your ability to build a client-server system. It may be an extension of the third assignment or a new project. It may be undertaken as a group project, but if it is, the total effort is expected to be greater than than for an individual project. Expectations about project sophistication will be a factor of the number of people working together. Each additional person should make the project 60% more sophisticated. A 6 person group should produce a project 400% more sophisticated than an individual project.

The following suggestions are made for the final project:

Three possible projects ideas include:

       A program that aides groups in scheduling and managing meetings. You might imagine a series of clients that are connected to a meeting server. The meeting server would provide some set of functions including as examples:

       A program that manages a collaborative meeting space for exchanging ideas about meetings

       Personal and group calendars

       Bulletin board

       Chat capabilities to manage both public and private exchanges among a series of clients who may be connected.

       Develop a client server pair in Java for collaborative editing of XML documents that uses XML based messaging for information interchange. The system must provide for branch and element level locking and shared editing of an individual text element. The instructor will provide a prototype that accomplishes about 70% of the functionality in a very rough



Grades for the course would then be as follows:

A = 90-100 points

B = 80-89 points

C = 65-79 points

F = 0-64 points

Course Schedule, Readings and Due Dates for Assignments

Class Meetings are on Tuesdays, 3:00pm -6:00pm, in Room 404

A Note on the Course Outline

The course outline provides a preliminary outline of the scope and sequence for the course. It is anticipated that there will be some slippage in the schedule if topics require more time than allocated. In this case, it is likely that topics such as application package overviews will slip from the schedule. It is also anticipated that some of the topics in the course scheduled for coverage later in the term will be addressed as they come up in class discussion.






Introduction and Review of Syllabus




Important UNIX Skills

Chps. 1-2, 27



A Simple Client

Chps. 3-7




Basic Skills again


 Client Assignment


Framework for Simple Server Design

 Chps. 8-10



Signals, Meters, and Tools




Servers Other


 Server Assignment


Protocol Designs

 Chps 23-26

 Focus on 25-26


Basic GUI Structures





Java for GUI





Java for GUI






Chps 19-22

Protocol/GUI Assignment 













Final Project Demos(optional)


Final Project