Несколько клиент-серверная коммуникационная программа на Java - PullRequest
12 голосов
/ 24 марта 2011

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

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

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);
        }
    }
}

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

Ответы [ 3 ]

24 голосов
/ 24 марта 2011

Класс 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

}
3 голосов
/ 24 марта 2011

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

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

1 голос
/ 24 марта 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...