Socket programming in Java example

Lucy 169 Published: 10/24/2024

Socket programming in Java example

Here is an example of socket programming in Java:

Server Side:

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[] args) throws IOException {

ServerSocket server = new ServerSocket(8000);

System.out.println("Server is running...");

while (true) {

Socket client = server.accept();

// Create a separate thread for each client connection

Thread t = new Thread(new ClientHandler(client));

t.start();

}

}

private static class ClientHandler implements Runnable {

private final Socket socket;

public ClientHandler(Socket socket) {

this.socket = socket;

}

@Override

public void run() {

try {

// Read from client and write to the console

java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(socket.getInputStream()));

String inputLine;

while ((inputLine = in.readLine()) != null) {

System.out.println("Received: " + inputLine);

}

} catch (IOException e) {

// Handle exception

} finally {

try {

socket.close();

} catch (IOException e) {

// Handle exception

}

}

}

}

}

Client Side:

import java.io.*;

import java.net.*;

public class Client {

public static void main(String[] args) throws IOException {

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

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

// Send a message to the server

out.println("Hello from client!");

String inputLine;

while ((inputLine = in.readLine()) != null) {

System.out.println("Received: " + inputLine);

}

socket.close();

}

}

In this example, we have a simple echo server and client implemented using Java sockets. The server runs continuously and listens for incoming connections on port 8000. When a connection is established, it creates a separate thread to handle the client communication.

The client initiates a connection with the server, sends a message ("Hello from client!"), and then receives any responses from the server until the end of the transmission.

Key Concepts:

Socket creation: In both the server and client sides, we create a socket object using new Socket() or new ServerSocket(). The latter is used to create a listening socket, while the former creates an outgoing socket. I/O Streams: We use I/O streams (e.g., PrintWriter, BufferedReader) to read from and write to sockets. These streams are used for both sending and receiving data over the network. Multithreading: In the server example, we create a new thread for each client connection using new Thread(new ClientHandler(client)). This allows multiple clients to be handled concurrently without blocking the main thread.

Advantages:

Concurrent handling of multiple connections: Java's threading mechanism enables us to handle multiple client connections simultaneously, improving system responsiveness. Flexibility in I/O operations: Using I/O streams for socket communication provides flexibility and ease of use when handling different types of data (e.g., text, binary). Robust error handling: We can incorporate robust error handling mechanisms using try-catch blocks to handle exceptions and ensure reliable communication.

This example demonstrates the basics of socket programming in Java, showcasing key concepts and advantages.

client-server socket programming in java

Client-server socket programming in Java is a fundamental concept in networking, and it allows two devices to communicate with each other over the network. This article will provide an overview of the client-server architecture and how to implement it using Java.

What is Client-Server Architecture?

The client-server architecture is a design model that defines how applications can be developed to interact with each other over a network. In this model, there are two types of devices:

Client: The client is the device that initiates communication and sends requests to the server. Server: The server is the device that responds to the client's requests and provides the requested services.

How Does it Work?

Here's how the client-server architecture works:

Request: The client sends a request to the server, specifying what service it needs (e.g., "I want to access the server's database"). Response: The server processes the request and returns a response back to the client. Data Transfer: Data is exchanged between the client and server as part of the communication process.

Java Implementation

Here's an example of how to implement a simple client-server application in Java:

Server Side:

import java.net.*;

import java.io.*;

public class MyServer {

public static void main(String[] args) throws IOException {

ServerSocket server = new ServerSocket(8000);

System.out.println("Server started. Listening for incoming connections...");

while (true) {

Socket client = server.accept();

System.out.println("Client connected: " + client.getInetAddress());

// Handle the client request

BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));

String line;

while ((line = reader.readLine()) != null) {

System.out.println("Received message from client: " + line);

// Process the message and send a response back to the client

PrintWriter writer = new PrintWriter(client.getOutputStream(), true);

writer.println("Hello, client! Your message was received.");

}

}

}

}

Client Side:

import java.net.*;

import java.io.*;

public class MyClient {

public static void main(String[] args) throws IOException {

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

System.out.println("Connected to server");

// Send a request to the server

PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);

writer.println("Hello, server! I'm here to access your database.");

// Receive the response from the server

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String line;

while ((line = reader.readLine()) != null) {

System.out.println("Received message from server: " + line);

}

}

}

How it Works

To run this application:

Compile the MyServer and MyClient classes. Run the MyServer class on one machine (e.g., your laptop). Run the MyClient class on another machine (e.g., your phone).

The client will connect to the server, send a request ("Hello, server! I'm here to access your database."), and receive a response back from the server ("Hello, client! Your message was received.").

Conclusion

In this article, we have learned how to implement a simple client-server application in Java. We explored the basics of the client-server architecture and implemented it using Java socket programming. This is just a basic example, but you can extend it to build more complex applications that interact with each other over a network.