How to build a server in Java: Part 2 - Connecting to the server

An image of a server with clients connected to it.
An image of a server with clients connected to it.

Building a client application

For this second part of the tutorial we will be building a client application to connect to the server built in the first tutorial. The client application will connect to the server using sockets much like the server used to connect to the client. Again, we will be using a PrintWriter to write information to the server and we will be using a BufferedReader to read information sent from the server. If you have not already then read the 1st part of the tutorial. Okay, let's go!

Sockets

The way we will use a socket for the client-application will be a little different because, instead of using a socket to receive a connection we will be using a socket to connect to the server. Here is how we set up a socket to connect to the server:

Socket socket = new Socket("localhost",5000);

The part of the code where I placed "localhost" is where you place the IP address of the server. Since it will be easy to run the server and the client on the same computer I will use localhost. Later on I will explain how to connect to the server from a different computer.

Now, you should understand everything in here, most of it is similar to what we did to set up the server. Here you go:

import java.io.*;
import java.net.*;
//We need a Scanner to receive input from the user
import java.util.Scanner;

public class Client
{
    public static void main(String[] args)
    {
        new Client();
    }
    
    public Client()
    {
	//We set up the scanner to receive user input
        Scanner scanner = new Scanner(System.in);
        try {
            Socket socket = new Socket("localhost",5000);
            PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
            //This will wait for the server to send the string to the client saying a connection
            //has been made.
            String inputString = input.readLine();
            System.out.println(inputString);
            //Again, here is the code that will run the client, this will continue looking for 
            //input from the user then it will send that info to the server.
            while(true) {
                //Here we look for input from the user
                String userInput = scanner.nextLine();
                //Now we write it to the server
                output.println(userInput);
            }
        } catch (IOException exception) {
            System.out.println("Error: " + exception);
        }
    }
}

The Explanation

The biggest difference between this and the server is that we use a scanner to receive input from the user. Other than that everything should be easy to understand. One confusing thing may be why we include this line:

String inputString = input.readLine();

You may be thinking, "Why are we waiting for input from the server?!? Aren't we supposed to be sending the server information." Well, remember this line we put into the server code to tell the client that he/she has connected?

output.println("You have connected at: " + new Date());

Well, we need to receive that information and we do that by getting the information from the server.

Much like the server we have a while loop that will continue running except that this while loop waits for user input then prints it out to the server.

Try running it!

Try running this code. First run the server, then run the client. What should happen is that after you run the client the server will acknowledge that the client has connected and then whenever you type anything into the client it should appear on the server.

So, run the server, then run the client, the type stuff into the client, hit enter, and watch it appear on the server!!!!!

What if I want to run it across two different computers?

Well, this isn't that hard but does complicate the process a little bit. First you need to set up port-forwarding for your router and have your router port-forward for port 5000 because that is the port we will be connecting through. This is a great site for figuring out how to port-forward for your specific router. Next, you can't have the client connect using "localhost" so delete "localhost" in your socket connection code and replace it with your ip address. Here is an example below:

Replace this:


Socket socket = new Socket("localhost",5000);

with this:

Socket socket = new Socket(<Your IP Address here>,5000);

You can find your IP Address by going here. Just paste your IP Address where I said <Your IP Address here> and you should be good to go.

Once you have done that then run the server code on one computer and run the client code on another. It should work across computers. In fact, this would work all the way around the world!!!!!!

Hooray!!!

Yay! You've made a server and you can connect to it!!!!!! But wait... what about chat? This server doesn't really let you chat with anyone and only one person can connect to the server at a time. Well, have no fear, Part 3 of the tutorial is here!!!!!

Download the code!

You can download the code for the server and the client here. Again, pardon the wait.

More by this Author


Comments

No comments yet.

    Sign in or sign up and post using a HubPages Network account.

    0 of 8192 characters used
    Post Comment

    No HTML is allowed in comments, but URLs will be hyperlinked. Comments are not for promoting your articles or other sites.


    Click to Rate This Article
    working