The goal of this assignment is to test and demonstrate your knowledge of socket programming and thread
multiprocessing, and to further strengthen your general C programming capabilities through more advanced
program design and implementation.
Put simply, this assignment is a networked/threaded version of the chat system you created for Assignment
3. You are welcome to re-use any code from your previous submission, although the core connection and thread
management code will all be new.
You are to create two programs, one server (server) and one client (client), which together form a
networked chat messaging system. The server is responsible accepting network connections from clients and
broadcasting messages between clients participating in the chat. The clients will connect to the server, and
present a line-based interface allowing messages to be sent and received, and a few chat commands. The clients
and server will communicate using a text-based messaging protocol over TCP/IP. This protocol is similar but
not identical to the protocol from Assignment 3.
Because we are using threads and sockets, the chat system is much more dynamic than Assignment 3. Clients
can join and leave the chat at any time. You interact with the client via stdin/stdout, and the use of sockets
means you can actually use it to chat with your classmates on moss. It’s basically IRC-lite.
This is an individual assignment. You should feel free to discuss general aspects of C programming and
the assignment speciﬁcation with fellow students, including on the discussion forum. In general, questions like
“How should the program behave if hthis happensi?” would be safe, if they are seeking clariﬁcation on the
You must not actively help (or seek help from) other students or other people with the actual design and
coding of your assignment solution. It is cheating to look at another student’s assignment code and
it is cheating to allow your code to be seen or shared in printed or electronic form by others.
All submitted code will be subject to automated checks for plagiarism and collusion. If we detect plagiarism
or collusion, formal misconduct proceedings will be initiated against you, and those you cheated with. That’s
right, if you share your code with a friend, even inadvertently, then both of you are in trouble. Do not post
your code to a public place such as the course discussion forum or a public code repository, and do not allow
others to access your computer – you must keep your code secure.
Uploading or otherwise providing the assignment speciﬁcation to a third party including online tutorial and
contract cheating websites is considered misconduct. The university is aware of these sites and they cooperate
with us in misconduct investigations.
You may use code provided to you by the CSSE2310/CSSE7231 teaching staﬀ in this current semester
and you may use code examples that are found in man pages on moss. If you do so, you must add a comment in
your code (adjacent to that code) that references the source of the code. If you use code from other sources then
this is either misconduct (if you don’t reference the code) or code without academic merit (if you do reference
the code). Code without academic merit will be removed from your assignment prior to marking (which may
cause compilation to fail) but this will not be considered misconduct.
The course coordinator reserves the right to conduct interviews with students about their
submissions, for the purposes of establishing genuine authorship. If you write your own code,
you have nothing to fear from this process.