有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多客户端javasocket服务器

我想知道如何更改我的程序,以便多个客户端可以连接

服务器从客户端获取数字,计算平均值,然后返回值

写下数字然后计算平均值就足够了,还是有其他方法可以解决这个问题

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {

    private final static String HOST = "localhost";
    private final static int PORT = 2300;
    private final static Scanner SCANNER = new Scanner(System.in);

    private static Socket socket;
    private static PrintWriter out;
    private static BufferedReader in;

    private boolean isRunning;

    public Client() {
        isRunning = true;
    }

    public void makeRequests() {
        while (isRunning) {
            try {
                socket = new Socket(HOST, PORT);
                out = new PrintWriter(socket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                System.out.println("Input number: ");
                int requestedNumber = SCANNER.nextInt();
                out.println(requestedNumber);
                String response = in.readLine();

                System.out.println("Response: " + response);

                if (response.equals("The number is correct!")) {
                    System.out.println("Closing the client.");
                    System.exit(1);
                }
            } catch (UnknownHostException e) {
                System.out.println("Could not find host.");
                e.printStackTrace();
            } catch (IOException e) {
                System.out.println("Could not get a response.");
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Client client = new Client();
        client.makeRequests();
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class Server extends Thread {

    private String serverName;
    private ServerSocket ss;
    private BufferedReader in;
    private PrintWriter out;

    private int randomNumber;

    private volatile boolean isRunning;

    public Server(String serverName, ServerSocket ss) {
        this.serverName = serverName;
        this.ss = ss;
        System.out.println("Server started: " + serverName + "listening at port: " + ss.getLocalPort());

        isRunning = true;
        randomNumber = generateRandomNumber(10);
        start(); // Uruchomienie wątku
    }

    public int generateRandomNumber(int range) {
        return new Random().nextInt(range);
    }

    public void run() {
        while (isRunning) {
            try {
                Socket connection = ss.accept();

                System.out.println("Connection established on server: " + serverName);

                serviceRequests(connection);
            } catch (IOException e) {
                System.out.println("Connection closed.");
                e.printStackTrace();
            }
        }

        try {
            ss.close();
            System.out.println("Connection closed.");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    private void serviceRequests(Socket connection) throws IOException {
        in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        out = new PrintWriter(connection.getOutputStream(), true);

        try {
            int requestNumber = Integer.parseInt(in.readLine());

            if (requestNumber > this.randomNumber) {
                System.out.println("The client guessed: " + requestNumber + ". Too high");
                makeResponse("too high.");
            } else if (requestNumber < this.randomNumber) {
                System.out.println("The client guessed: " + requestNumber + ". Too low.");
                makeResponse("too low.");
            } else {
                System.out.println("The client guessed: " + requestNumber);
                System.out.println("CONGRATULATIONS, CORRECT!");
                makeResponse("correct!");
                ss.close();
            }
        } catch (NumberFormatException e) {
            System.out.println("Could not parse request to integer.");
        }
    }

    private void makeResponse(String message) throws IOException {
        out.println("The number is " + message);
    }

    public static void main(String[] args) {
        try {
            InetSocketAddress isa = new InetSocketAddress("localhost", 2300);
            ServerSocket ss = new ServerSocket();
            ss.bind(isa);

            new Server("test", ss);
        } catch (IOException e) {
            System.out.println("Could not create server socket.");
            e.printStackTrace();
        }
    }
}

共 (0) 个答案