ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel
  • »
  • Technology»
  • Computers & Software»
  • Computer Science & Programming»
  • Programming Languages

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

Updated on October 8, 2011
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!


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:

//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(;
        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();
            //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
        } 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!!!!!!


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.


    0 of 8192 characters used
    Post Comment

    No comments yet.


    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: ""

    Show Details
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the or domains, for performance and efficiency reasons. (Privacy Policy)
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)