Tagbangers Blog

How Networking Between a Client and a Server Works

When I started to work here I was creating a web server for learning, but I did't have a chance to complete it. 

So recently, I started to work on it again to have a better understanding about the web.

In this article, I'm going to right about how networking between a client and a server works.

To start off, let's make a simple client and a server.

Client.java

package client;

import java.net.Socket;

public class Client {
    public static void main(String[] args) throws Exception {
        try(Socket socket = new Socket("localhost", 8001)) {
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Server.java

package server;

import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws Exception {
        try(ServerSocket serverSocket = new ServerSocket(8001)) {

            System.out.println("Waiting for a client");
            Socket socket = serverSocket.accept();
            System.out.println("Client connected!");

            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

When you run the client after running the server, the client tries to connect to the server.

But how exactly does that happen? I summarized this process down below.


1. Creating a socket

At first, the server creates a socket. Sockets are like an entrance and an exit on each side of a pipe. When a socket is made in Server.java above, it will wait for a connection from another socket at port 8001 (Outputs "Waiting for a client"). There also will be a descriptor (a number assigned to a socket) returned. The application will keep a record of that number on its memory, and it will distinguish sockets according to this number.

2. Connecting a pipe to the server's socket

"new Socket("localhost", 8001) creates a stream socket, and connects to the specified port number (Outputs "Client connected!").

In order to connect to the desired socket accurately, an IP address and a port number is necessary. (It's basically the same as sending a letter. The IP address is like an address of a building, and the port number is like the name of the person you are sending the letter to.)

3. Transmitting and receiving data

The data will be transmitted via a network. Then, the server returns a response. The memory space for storing the received message is called a receive buffer.

4. Disconnecting the pipe and erasing the socket

Disconnects the pipe. It doesn't matter whether you disconnect it from the server or the client. Erase the socket afterwards. 


I hope this clears up questions regarding sockets!


Original article written by: Ryosuke Uchitate

Translated by: Yu Koga