Multithreaded Client/Server Chat program

I have to make a Multithreaded Client/Server Chat program for one of my courses (for school). I've been looking around on the internet and gathered pages of information on this subject by now.

Design is one of the most important aspects of this application and that is why this topic is born.

I would like to share my ideas and I hope anyone can help/point me out in a direction to improve my design.

The Plan:

Server:
- Thread that listens for hosts that try to connect (authenticated hosts get added to a list)

Client:
- The Host connects to server
- Clients have 2 threads (one for sending messages to server and one for receiving messages from server)

The basis idea is when a Client sends a message (which is an object => serialization). The server receives this message and "broadcasts" it to the other clients. I would also like to add multicast (use of chatrooms) and unicast (private messaging) in a later stage.

- do I want to write the class message 2 times (in the Client & Server application?! How can I fix this!? => better design possibility?)
- sending objects over the network a wise idea?!
- do I need to use a protocol? how do I implement this?
- ...

ps. I'm pretty familiar with how Java works so this isn't a "please help me create some code" topic, i'm only interested in improving/creating the best design :). This assignments needs to be ready in 6 weeks, when I've handed in my work and received a grade i'll post it here for people to use!
ps. Sorry for bashing this big wall of text upon your screen :D

Better start with a psudocode and then start writing the code.If u come across any problem,the people can help you.

I'll make some Use Cases tonight, writing pseudocode just looks like one big time waste to me...

Also I want to note that the keypoint is not to get the code working, cause that won't be the problem. The keypoint is that alot of thought is put in the construction of this application before I start writing even 1 single line of code!

I always learned Analysing is one of the key essences in programming, this isn't my strongest point (yet)! That's why I created this topic. Any people familiar with designing multithreaded networking application that have some advise for me? or some essential stuff that will improve my design?

GUI:
- serverFrame => after giving up name + port for the server you can fire the server up, once the server is fired you'll have a big JTextArea where you can monitor the server (new connections, ....)

GUI:
-connectFrame => after giving up the server address, server port and the desired nickname, the server will authenticate you. Once this is succeeded you'll proceed to the chatFrame
-chatFrame => this is the place where you can typ stuff to other people. You can see the people who are online. extra functionality here will be added later.

Design Issues:
Do I really need to User, Message both in the user and server application (same code). These objects will be put on the streams. User will be used for authenticating a user and Message to store messages in. Any suggestions?

Do I have to work with 2 different threads on the Clients side? One that is gonna accept messages from the server and one that sends messages to the server?

On the server portion... you will need to have a thread per client socket to listen for data coming in. Unless you plan on using NIO sockets (i would avoid NIO for a school assignment because of it's complexity).