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 speciﬁcation.
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.