Creating a Chat Server Using Java

99,991

160

13

Introduction: Creating a Chat Server Using Java

Introduction

Networking is a major branch of programming that is vital to connecting users through devices. As such many programming languages have multiple ways to form connections users and servers or between peers. For starting out programming, Java is one of the first languages many programmers learn, and one of the interesting ways java can handle network connections is through the use of Java Sockets. I have prepared this tutorial to instruct how to use sockets in java by developing a chat server between one server and many users. This tutorial is divided between client side and server side development.

Requirements:

  • Java JDK (I used version 1.8.0_74 for this)
  • Java IDE (I used Eclipse Mars for this)
  • A package structure with the above classes

Timer: About 15-30 minutes

Skill: This guide assumes that you have basic Java experience and are familiar with common Java I/O types

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Setup a ServerSocket in the Server Class

Create a static Server socket at the beginning of main in the ChatServer class and instantiate it with a port number.

TIP: ServerSockets may be instantiated with a port number other than 4444, but numbers lower than 1000 are more likely to already be in use by the system.

Step 2: Create a Socket in the Login Class

Create a socket in the main method of Login, specifying the host address and port number. Since this is a login window, the socket can be an instance variable as it will be passed to the actual chat window later.

TIP: "localhost" is used in the socket parameters for debugging purposes to specify that the server is running on the same computer as the client. Later this can be changed to take a host address to connect to a remote server.

Step 3: Create a Loop to Continuously Accept Clients

After instantiating the serverSocket in chatServer, start a while loop that continuously accepts all clients.

Step 4: Create the Client Threads

  1. With the socket received from serversocket.accept, create a new ClientThread .
  2. Create a new Thread using the ClientThread, and then call start on the thread.
  3. In ClientThread, make ClientThread extend ChatServer, and implement Runnable
  4. Create the ClientThread constructor and add the method run.

Step 5: Create the Server Thread

  1. Create a new ServerThread using socket.
  2. Create a new Thread using the ServerThread, and then call start on the thread.
  3. In ServerThread, make ServerThread implement Runnable
  4. Create the ServerThread constructor and add the method run.

Step 6: Make the Client Thread Send and Receive Data

  1. In ClientThread make a private BufferedReader in to receive data from clients, and a PrintWriter to write to the client.
  2. Create a getter for the PrintWriter
  3. Initialize the PrintWriter in run with the socket's output stream, and the BufferedReader with a new InputStreamReader using the socket's input stream
  4. Create a while loop in run that checks for any new input and prints the input to all clients using the list of ClientThreads and the getter for the PrintWriter

Step 7: Make the Server Thread Send and Receive Data

  1. In ServerThread make a private BufferedReader in to receive data from the server, another BufferedReader to receive data from the user, and a PrintWriter to write to the server.
  2. Initialize the PrintWriter in run with the socket's output stream, the server's BufferedReader with a new InputStreamReader using the socket's input stream, and the user's BufferedReader with a new InputStreamReader using System.In
  3. Create a while loop in run that checks for any new input from the server and prints the input to the console, and checks for any new input from the user and prints that input to the server.

Step 8: Test the Server and Add Optional Functionality

After running the server and launching clients, the program should relay all messages from each client to all other clients. This was a small test of what can be done with java sockets.

You can expand on this project by adding functionality to let the server itself relay messages, archiving messages, allowing other forms of input and more to become more familiar with java sockets and networking in general.

Be the First to Share

    Recommendations

    • LED Strip Speed Challenge

      LED Strip Speed Challenge
    • Sculpting Challenge

      Sculpting Challenge
    • Clocks Contest

      Clocks Contest

    13 Discussions

    0
    Sara87
    Sara87

    Question 4 months ago on Step 8

    Hi!
    how I implement two extensions more
    1. Allow different privilege levels for users, normal users and super users. Super users have the ability to ban other users permanently from further conversations by sending a special message to the server.
    2. Allow two users to set up a private chat channel through issuing a special message. Private channel means that the users see their mutual messages and everybody else’s, but nobody can see the two users' messages on the public channel.
    0
    isaachenry2875
    isaachenry2875

    Question 6 months ago

    Could you help me out, i have most of it down but how do you link the java files to the main one? And maybe you could give me the source code.
    Thanks, Isaac you can contact me at isaachenry2875@gmail.com

    0
    reenadhillon
    reenadhillon

    Question 11 months ago on Step 3

    this code give the error when put the portNumber into serversocket parameter.

    0
    fliedonion
    fliedonion

    2 years ago

    Does not work.
    I upped my own fixed version : https://gist.github.com/fliedonion/1002293af6fd043fbd6e729c13018562

    0
    AmirulY1
    AmirulY1

    Reply 1 year ago

    hey, what software that you use for this code?

    0
    reteid2222
    reteid2222

    Tip 2 years ago on Step 7

    This description is one of the worst I see of sockets...and it doesn t work!

    0
    lakshmigs
    lakshmigs

    Question 2 years ago on Step 6

    Hi,


    How to Send files,images,documentss,exe files ..
    can you plese provide me a java code for sending files,images and documents...

    Thank you

    2
    Yashikajain
    Yashikajain

    2 years ago

    can uh give the source code of it......I mean full code togather

    0
    AllenG9
    AllenG9

    3 years ago

    Nothing will work. I could not even load anything because i had so many errors.I NEED HELP NOW

    0
    thegan5
    thegan5

    3 years ago

    can you create an instructable for this project that can run on net beans IDE or Microsoft Visual Studio

    0
    calebbug77
    calebbug77

    4 years ago

    im kinda a noob with Java and my computer is broken so yea

    0
    BossRobotMaker2121
    BossRobotMaker2121

    4 years ago

    Hi I'm kinda a noob w/ Java but I made a web page with notepad++ and chrome
    Could u help me out a little?
    You know simplify it?
    Thx

    0
    garrettg7
    garrettg7

    Reply 4 years ago

    hi, I too am unskilled at Java, I've got my own web server and stuff running (no certificates or domain names) and this would be really cool to do, but I agree, it would be nice if it could be simplified.