You are on page 1of 3

EEE 13 Machine Problem 2 

Group Chat 
 
The  group  chat  is  a  popular  means  of  communication  over  the  internet.  It  has  made 
communication  between  people  separated  by  distance  much  easier,  thus  unifying  all  people 
within  our  nation,  denouncing  the  evil  of  truth  and  love,  and  extending  our  reach  to  the  stars 
above. #hugot #teamrocket 
 
Your  task  is  to   create  a  chat  server  using  TCP  that  will  accept  connections  from 
terminal  clients.  The  server  is  in  charge  of  creating  and  maintaining   accounts,  giving  users 
access  to  the  chat, and updating  the  chat  window  when  users  send  messages  or  log  in  and 
out. 
 
Using  the  chat  client,  the  user  should  be  able  to   log   into  an  existing  account  on  the 
server  (or  create  one  if  it  doesn’t  exist),  and  send  and  receive  messages  from  other 
connected users. 
 
The following features should be implemented: 
­ connect to a server (ip, port) which is assumed to be on 
­ account creation 
­ log­in 
­ timestamp of when message was sent 
­ timestamp of when user logged in/out (can be seen by others) 
­ command that prints who is online 
 
Commands to Support: 
­ Connecting to Server (client): 
­ client should connect to the server using command­line arguments 
­ can connect to server using computers connected to local network 
­ eg. ./client <ip_address> <port> 
 
­ Logging In/Create Account (client): 
­ upon connecting to server, client should prompt user with a message like “1 ­ 
Login / 2 ­ Create Account” 
­ entering “1” should allow user to log in with username and password 
­ typing passwords should show asterisks instead of being blank 
­ server should double­check if the account exists, should not let user join 
the chat if the account is not valid 
­ entering “2” should allow user to create an account with a unique username 
and password  
­ typing passwords should show asterisks instead of being blank 

­

­
­
­
­

­

­

­

­

­

the user should be prompted twice for the password, and the client or 
server should ensure that both password fields match 
­ the login credentials should be saved in the server (MySQL/SQLite3 
database not required, but is a bonus) 
erroneous commands should be handled 
blank usernames and blank passwords are not allowed 
if login is successful, a message similar to “<timestamp>: <username> has 
entered chat” should be broadcasted to all other users 
(bonus) password should be hashed by the client; the hashing function should 
be at least as complex as an MD5 hash, not something like ROT­13 

 
Messaging (client): 
­ COMMAND: <message>  
­ limit of 140 characters 
­ message should be broadcasted to all users (similar to “<timestamp>: 
<username>: <message>”) 
 
Who Is Online (client): 
­ COMMAND: /whosonline 
­ server should send the list of online users to the client that requested it only 
 
Logging Out (client): 
­ COMMAND: <Ctrl+C signal> 
­ there should be a signal handler for Ctrl+C 
­ server should broadcast that the user has logged out (similar to “<timestamp>: 
<username> has logged out”) 
 
Chat Room Termination (server): 
­ pressing Ctrl+C should initiate termination of the server 
­ before the server exits, it should broadcast a message telling the clients to 
disconnect 
­ server will only terminate when all clients have logged out 
 
Private Message (bonus): 
­ COMMAND: /PM <username> <message> 
­ sends a message to that user only 

 
All messages from the server should be accompanied by a timestamp of when the event 
happened (ie. when the client sent the message, when the client logged in/out). You can 
define your own protocol for this machine problem, however, an extra bonus will be granted if 
your client/server can communicate with the client/server of other people. 
 

Grading: 
This machine problem is to be done individually. Copying of code from other people is 
prohibited. Code snippets taken online should be properly cited in code and in documentation.  
 
Connect a to server (5%) 
prints which IP is connected/disconnected 
Create account (15%) 
Saving account in a server file/database (10%) 
Unique username checking (2%) 
Password match checking (3%) 
Log­in (5%) 
Chat proper (40%) 
Log­in/out notification (5%) 
Message timestamps (5%) 
 
Message sending and truncation (20%) 
Log­out function (10%) (using Ctrl+C signal) 
Terminate server (10%) 
Display who is online command (15%)  
Documentation (10%) 
Bonus (20%) 
Hashing (5%) 
Private messaging (5%) 
SQL database for login data (5%) 
Can communicate with program of other classmates properly (5%)