code

import java.io.*;
import java.net.*;
 
public class Server {
    public static void main(String[] args) {
        int port = 8000;
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("Server is waiting for client connections...");
 
            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("New client connected!");
 
                // Assign a new thread for each client
                ClientHandler clientHandler = new ClientHandler(clientSocket);
                new Thread(clientHandler).start();
            }
        } catch (IOException e) {
            System.out.println("Server Error: " + e.getMessage());
        }
    }
}
 
import java.io.*;
import java.net.*;
 
public class ClientHandler implements Runnable {
    private Socket socket;
    private DataInputStream dis;
    private DataOutputStream dos;
 
    public ClientHandler(Socket socket) {
        this.socket = socket;
        try {
            dis = new DataInputStream(socket.getInputStream());
            dos = new DataOutputStream(socket.getOutputStream());
        } catch (IOException e) {
            System.out.println("Error initializing client handler: " + e.getMessage());
        }
    }
 
    @Override
    public void run() {
        try {
            String msg;
            while (true) {
                msg = dis.readUTF().trim();
                System.out.println("Client: " + msg);
 
                if (msg.equalsIgnoreCase("end")) {
                    dos.writeUTF("Server: Connection closed.");
                    break;
                }
 
                // Server's response logic
                String response = "Server says: " + msg;
                switch (msg.toLowerCase()) {
                    case "hello":
                        response = "Hi! How are you?";
                        break;
                    case "kaisa hai":
                        response = "Main badhiya, tum batao?";
                        break;
                    default:
                        response = "Server: " + msg;
                }
 
                dos.writeUTF(response);
            }
        } catch (IOException e) {
            System.out.println("Client disconnected.");
        } finally {
            try {
                socket.close();
                System.out.println("Client connection closed.");
            } catch (IOException e) {
                System.out.println("Error closing socket: " + e.getMessage());
            }
        }
    }
}
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.io.*;
import java.net.Socket;
 
public class myClient {
    private Socket socket;
    private DataInputStream dis;
    private DataOutputStream dos;
    private JTextArea chatArea;
    private JTextField inputField;
 
    public myClient(String address, int port) {
        try {
            socket = new Socket(address, port);
            dis = new DataInputStream(socket.getInputStream());
            dos = new DataOutputStream(socket.getOutputStream());
 
            startGUI();
 
            // Start listening for server messages
            new Thread(() -> listenToServer()).start();
 
        } catch (IOException e) {
            System.out.println("Client Error: " + e.getMessage());
        }
    }
 
    private void startGUI() {
        JFrame frame = new JFrame("Chat Client");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setLayout(new BorderLayout(10, 10));
 
        chatArea = new JTextArea();
        chatArea.setEditable(false);
        chatArea.setMargin(new Insets(10, 10, 10, 10));
        chatArea.setLineWrap(true);
        frame.add(new JScrollPane(chatArea), BorderLayout.CENTER);
 
        inputField = new JTextField();
        inputField.addActionListener(this::sendMessage);
        frame.add(inputField, BorderLayout.SOUTH);
 
        frame.setVisible(true);
    }
 
    private void sendMessage(ActionEvent e) {
        String message = inputField.getText().trim();
        if (!message.isEmpty()) {
            try {
                dos.writeUTF(message);
                dos.flush();
                chatArea.append("You: " + message + "\n");
                inputField.setText("");
            } catch (IOException ex) {
                chatArea.append("Error: " + ex.getMessage() + "\n");
            }
        }
    }
 
    private void listenToServer() {
        try {
            while (true) {
                String response = dis.readUTF();
                chatArea.append(response + "\n");
            }
        } catch (IOException e) {
            chatArea.append("Disconnected from server.\n");
        }
    }
 
    public static void main(String[] args) {
        new myClient("localhost", 8000);
    }
}