COMS3200 Assignment 1 2023S1
100 total marks, 25% overall course mark
Due: 15:00 19 April 2023
1 Preface
1.1 Notes
This document is subject to change for the purposes of clarification. Changes made since the
original release will be highlighted in red.
Please post any questions on the course Ed stem page.
It is strongly recommended that all programming tasks are done in Python 3.6.8 or C.
1.2 Revision History
20 March, 2023: Version 1.0 Released.
24 March, 2023: Version 1.1 Clarifications to startup behaviour, malformed commands and python
version.
29 March, 2023: Version 1.2 Clarifications to commands and queue behaviour.
31 March, 2023: Version 1.3 Clarifications to commands
2 Part A: Problem Solving Questions
This section is worth 25% of the assignment.
The scope of this section is chapters 1-3.
Show full working for all questions. Marks may be withheld if working is not provided.
The question set is located on Blackboard under Assessment =? Assignment 1 =? Part A: Problem
solving questions.
There is no time limit to submit these answers and multiple resubmissions are permitted. Only the
last submitted attempt will be marked.
3 Part B: Wireshark Questions
This section is worth 20% of the assignment.
This section covers ICMP, HTTP, DNS and DHCP.
The question set is located on Blackboard under Assessment =? Assignment 1 =? Part B: Wireshark
questions and the capture file is located under Assessment =? Assignment 1 =? Part B: Packet
capture File.
There is no time limit to submit these answers and multiple resubmissions are permitted. Only the
last submitted attempt will be marked.4 Part C: Socket Programming
This section is worth 55% of the assignment.
4.1 Goals
You will implement a multi-channel chat application using socket programming in Python 3 or C.
You will create two programs; a chat client and a chat server.
4.2 Programs
You must use socket and multithreading libraries. The use of any other third-party libraries is not
allowed. You must implement all chat logic yourself.
If you choose to use Python then you must name your programs chatclient.py and chatserver.py.
If you choose to use C then you must name your programs chatclient and chatserver.
4.3 Report
You must also submit a plaintext README file named readme.txt. This file must contain:
A brief and high-level abstract detailing your overall approach.
A list of functions you implemented with their respective descriptions.
An overview to how you tested your code.
IEEE references to any code you used and was not written by you. This includes generative AI.
4.4 Requirements
4.4.1 High-level Requirements
You must implement a server program which can support concurrent communication between multiple
clients across multiple channels.
The server must be able to maintain at least three distinct chat channels simultaneously, each of which
may contain at least five simultaneous connections. The exact operation of the server’s channels will
be specified in an external config file.
As clients connect to a channel within the server, they are to be placed in a waiting queue until there
is room available for them to join the channel.
Once in a channel, clients are able to send messages to other clients within that same channel.
Clients are able to specify the username which will be used to identify them within the channel. Your
client and server programs must rely on socket and multithreading libraries in either Python or C.
If you wish to use another programming language, you must get written permission from the course
coordinator.
You may use any transport layer protocol but it is highly recommended you use TCP.
24.4.2 Functional Requirements
The server must be able to be started by one of the two below commands:
$ ./ chatserver configfile
$ python3 chatserver . py configfile
where configfile is the path to the server configuration file. The client must be able to be started by
one of the two below commands:
$ ./ chatclient port username
$ python3 chatclient . py port username
where port is the port of the desired channel and username is the name which should be used to identify
the client in the chat channel.
All lines in the server configuration file must follow the below format:
channel < channel_name > < channel_port > < channel_capacity >
where is the name of the channel, is the port that channel should use
and is the maximum number of users who can be active at once within a channel.
The below requirements must be met:
Each channel must operate on independent sockets.
No two channels can have the same name or port.
No channel should use the ephemeral port.
Channel names cannot begin with a number.
There must be at least three channels in the config file.
Each channel’s capacity must be at least five.
If the configuration file is missing, invalid or not specified, then the server process should exit im
mediately with status code 1. Similarly, if the client cannot connect to the server due to malformed
arguments or an invalid port number, then the client process should also exit immediately with status
code 1.
Once the server is running, it will accept incoming client connections. Before clients are permitted to
enter their requested channel, they will be entered into a first-in-first-out waiting queue specific to that
channel. Once there is a free position in the channel, the longest-waiting client may be removed from
the waiting queue and entered into the channel.
Upon entering the waiting queue, the below should be displayed on the client’s stdout:
[ Server message (< time >) ] Welcome to the < channel_name > channel , < username >.
Where