Following up on my previous post, we also had to demonstrate a sample Java TCP Server and TCP Client. The code footprint pretty small and it gives you a good idea about how a TDP Server opens up a port, and then the TCP Client sends or receives data from that port.

This is a good page on the differences between TCP and UDP.

To compile these, install Java JDK to your system. Then compile the program with [cc inline=”1″]javac TCPClient.java – this will create a TCPClient.class. Execute the file with [cc inline=”1″]java TCPClient – leave off the .class, or you will get the error: “Exception in thread “main” java.lang.NoClassDefFoundError”.

Here is sample code for a simple Java TCP Server/Client, originally from the excellent Computer Networking: A Top Down Approach, by Kurose and Ross:

TCPServer.java

import java.io.*;
import java.net.*;

class TCPServer {
 public static void main(String argv[]) throws Exception {
  String clientSentence;
  String capitalizedSentence;
  ServerSocket welcomeSocket = new ServerSocket(6789);

  while (true) {
   Socket connectionSocket = welcomeSocket.accept();
   BufferedReader inFromClient =
    new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
   DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
   clientSentence = inFromClient.readLine();
   System.out.println("Received: " + clientSentence);
   capitalizedSentence = clientSentence.toUpperCase() + 'n';
   outToClient.writeBytes(capitalizedSentence);
  }
 }
}
[av_promobox button=’yes’ label=’Prime Student’ link=’manually,https://www.amazon.com/gp/student/signup/info/?ref_=assoc_tag_ph_1402130811706&_encoding=UTF8&camp=1789&creative=9325&linkCode=pf4&tag=theblackhol0a-20&linkId=779323346577fae595d8b097b4850ff4′ link_target=” color=’theme-color’ custom_bg=’#444444′ custom_font=’#ffffff’ size=’large’ icon_select=’yes’ icon=’ue82b’ font=’entypo-fontello’ box_color=” box_custom_font=’#ffffff’ box_custom_bg=’#444444′ box_custom_border=’#333333′ admin_preview_bg=” av_uid=’av-7uazw’] Hi there you hard working student! Please consider signing up for Prime Student using the link to the right. You’ll get 6 months of FREE Amazon Prime which means 50% off normal shipping and other cool Amazon perks.[/av_promobox]

and the client:

TCPClient.java

import java.io.*;
import java.net.*;

class TCPClient {
 public static void main(String argv[]) throws Exception {
  String sentence;
  String modifiedSentence;
  BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
  Socket clientSocket = new Socket("localhost", 6789);
  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  sentence = inFromUser.readLine();
  outToServer.writeBytes(sentence + 'n');
  modifiedSentence = inFromServer.readLine();
  System.out.println("FROM SERVER: " + modifiedSentence);
  clientSocket.close();
 }
}

If you have any questions, please leave a comment!

43 comments
  1. Pingback: Dave Drager
  2. Hi

    simply what I needed :)

    Is it possible to add persistence to this example (inserting the data into a Firebird db, the data is in binary format)?

    Best regards,
    Michel

  3. Hi

    simply what I needed :)

    Is it possible to add persistence to this example (inserting the data into a Firebird db, the data is in binary format)?

    Best regards,
    Michel

  4. I wrote my first Java socket client/server application in 1993! So this code looks mighty familiar.

    However, servers I’ve written subsequently all implement Thread so you can build a pool of connections available and new ones are spawned as traffic arrives. A small point, but one that makes this code scalable.

  5. I wrote my first Java socket client/server application in 1993! So this code looks mighty familiar.

    However, servers I’ve written subsequently all implement Thread so you can build a pool of connections available and new ones are spawned as traffic arrives. A small point, but one that makes this code scalable.

  6. Hi, Congratulations to the site owner for this marvelous work you’ve done. It has lots of useful and interesting data.

  7. Hi, Congratulations to the site owner for this marvelous work you’ve done. It has lots of useful and interesting data.

  8. you forgot

    import java.net.Socket;
    and
    public static void main(String[] args) throws IOException {

    anyway, thanks, exactly what I needed :)

  9. you forgot

    import java.net.Socket;
    and
    public static void main(String[] args) throws IOException {

    anyway, thanks, exactly what I needed :)

  10. Hi, there are nice work for a simple and easy understand server client example.
    However, I have some question which is:
    what is the use of ‘n’ in
    outToServer.writeBytes(sentence + ‘n’);

    i try to remove it and the program won’t work. Can you please do simple explain to me?
    Thanks

    Vince

  11. Hi, there are nice work for a simple and easy understand server client example.
    However, I have some question which is:
    what is the use of ‘\n’ in
    outToServer.writeBytes(sentence + ‘\n’);

    i try to remove it and the program won’t work. Can you please do simple explain to me?
    Thanks

    Vince

  12. @vince: n stands for new line. This lets the TCP Server know that your sentence has been sent. Let me know if you have any other questions.

  13. @vince: \n stands for new line. This lets the TCP Server know that your sentence has been sent. Let me know if you have any other questions.

  14. The Java Tutorials are practical guides for programmers who want to use the Java programming language to create applications.

  15. The Java Tutorials are practical guides for programmers who want to use the Java programming language to create applications.

  16. HI,,,,
    I have cpyied the TCPClient code on my pc
    and the TCPServer code on another pc but nothing happened
    “there is no error”.
    please reply

  17. HI,,,,
    I have cpyied the TCPClient code on my pc
    and the TCPServer code on another pc but nothing happened
    “there is no error”.
    please reply

  18. Thanks man…
    it really helps… :)
    but I would like to modify this code so that the client sends a request to the server to “add 10 20” then the server will calculate it and send back 30 :) I will try to do.. thanks dude

  19. Thanks man…
    it really helps… :)
    but I would like to modify this code so that the client sends a request to the server to “add 10 20” then the server will calculate it and send back 30 :) I will try to do.. thanks dude

  20. I’m trying to figure out how to add a login mechanism to this code. I also want the server to be the one that grants access not the client for obvious reasons. I’m sending the user/pass through the same socket that will be used for communication, yet my program crashes right at the point of asking for the password. User name gets through no problem. I believe it is some kind of connection reset error.

  21. I’m trying to figure out how to add a login mechanism to this code. I also want the server to be the one that grants access not the client for obvious reasons. I’m sending the user/pass through the same socket that will be used for communication, yet my program crashes right at the point of asking for the password. User name gets through no problem. I believe it is some kind of connection reset error.

  22. Pingback: Dave Drager
  23. Hi…
    I want chatting program in java as client side and server side
    pls help me

  24. Hi…
    I want chatting program in java as client side and server side
    pls help me

  25. Best simple code!

    @Bhanusankar Bsc
    The input string in uppercase:
    System.out.println(“Received: ” + clientSentence);
    capitalizedSentence = clientSentence.toUpperCase() + ‘n’;
    outToClient.writeBytes(capitalizedSentence);//response to the client

  26. hi, if you run the client, then type something like “hello world” and then press enter, the server and the client will respond (only obvious if you read the code)

  27. the out put is whatever you type into the client via this line in the code:

    sentence = inFromUser.readLine();
    outToServer.writeBytes(sentence + ‘n’);

  28. hi i am new in Java and android…my app is not working , i can connect and send data to the server( PC .net server)

    the server send me ” 3 string”

    through your code … i wrote this solution but it is not working :

    while(true){

    try {

    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(sock.getInputStream()));

    message = inFromServer.readLine();

    Toast.makeText(client.this, message,Toast.LENGTH_LONG).show();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    Toast.makeText(client.this, “not working”,Toast.LENGTH_LONG).show();

    e.printStackTrace();

    }

    }

    can you tell me what’s wrong… Please

  29.  in this code there are two classes in which it has two main. so how i write this code…

  30. try moving the while loop just before the message = infromserver.readline().

    your current code creates thousands of inputStreanReaders and bufferReaders.
    also make sure when sending you end your strings with n since you are using the readline method.
    if it still isn’t fixed try after sending calling the .flush() mehod on the dataoutputstream (if such method exists not sure)

Comments are closed.

You May Also Like

Visual.Syntax is my choice for code highlighting

I am using the Visual.Syntax code highlighting plugin by Matthew Delmarter. There…

How to Install SNMP on Tomato Router Firmware and Graph Traffic with Cacti

You’ve flashed your old WRT54G or other vanilla router with the Tomato…

Outlook 2003 or 2007 Won’t Save Hosted Exchange Password

For many people using hosted Exchange services, password saving problems could plague…