Подтвердить что ты не робот

Программа взаимодействия нескольких клиентов с сервером в Java

Я написал программу взаимодействия между сервером и клиентом, и он работал хорошо.

Клиентский модуль

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

class Client {
    public static void main(String argv[]) throws Exception {
        String sentence;
        String modifiedSentence;
      while(true){
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

        Socket clientSocket = new Socket("myname.domain.com", 2343);

        DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        System.out.println("Ready");
        sentence = in.readLine();
        out.writeBytes(sentence + '\n');
        modifiedSentence = in.readLine();
        System.out.println(modifiedSentence);
       }
      clientSocket.close();
    }
}

Серверный модуль

import java.net.*;

public class Server {
    public static void main(String args[]) throws Exception {
        String clientSentence;
        String cap_Sentence;
        ServerSocket my_Socket = new ServerSocket(2343);

        while(true) {
            Socket connectionSocket = my_Socket.accept();
            BufferedReader in = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            DataOutputStream out = new DataOutputStream(connectionSocket.getOutputStream());
            clientSentence = in.readLine();
            cap_Sentence = "Raceived:" +  clientSentence + '\n';
            out.writeBytes(cap_Sentence);
        }
    }
}

Вышеприведенный код для единой клиент-серверной связи теперь я хочу, чтобы несколько клиентов взаимодействовали с этим сервером. Я искал ее для поиска и обнаружил, что это можно сделать с использованием потока для каждого отдельного клиента, чтобы поговорить с сервером, но так как я новичок, я точно не знаю, как его реализовать. Поэтому, пожалуйста, скажите мне, как это сделать или дать мне некоторое представление об этом.

4b9b3361

Ответ 1

Класс MainServer

public class Server {

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

        ServerSocket serverSocket = null;

        boolean listeningSocket = true;
        try {
            serverSocket = new ServerSocket(2343);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 2343");
        }

        while(listeningSocket){
            Socket clientSocket = serverSocket.accept();
            MiniServer mini = new MiniServer(clientSocket);
            mini.start();
        }
        serverSocket.close();       
    }

}

Класс помощника

public class MiniServer extends Thread{

    private Socket socket = null;

    public MiniServer(Socket socket) {

        super("MiniServer");
        this.socket = socket;

    }

    public void run(){
            //Read input and process here
    }
            //implement your methods here

}

Ответ 2

Вы хотите посмотреть Java concurrency. Это концепция одной программы Java, выполняющая сразу несколько действий. На высоком уровне вы берете блок while(true) { //... } и запускаете его как часть метода run() класса, реализующего Runnable, Вы создадите экземпляры Thread, которые вызывают метод run(), возможно, один на каждого клиента, которого вы ожидаете.

Для действительно хорошего, глубокого понимания всего, что предлагает Java, когда дело доходит до concurrency, посмотрите Java Concurrency на практике.

Ответ 3

Ну, когда я делаю что-то подобное, я реализую слушателя, который управляет сервером, поэтому, когда клиент (клиент, вероятно, не нуждается в изменениях) подключается, сервер запускает один поток для работы с этим клиентом.

while (!stop)
            {
                socket = serverSocket.accept();
                HiloSocket hiloSocket = new HiloSocket(socket, this);
                hiloSocket.start();
            }

Конечно, HiloSocket расширяет Thread и имеет логику управления клиентом...