Как передавать сообщения, отправленные от клиента к клиенту - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно сделать передачу сообщения клиент-сервер-клиент. Теперь у меня есть сервер, соединяющий клиентов с новым потоком. Нужно реализовать только передачу сообщений, как я могу это сделать?

У меня есть серверная часть (в отдельной упаковке)

class WebServerHandler {
    static int clientsCount = 0;
    static ThreadGroup clientList;
    WebServerHandler(){

    }
    public static void main(String...args)throws IOException
    {
        ServerSocket serverSocket = new ServerSocket(80, 10000,InetAddress.getByName("localhost"));
        System.out.println("Server Started  !");
        while(true){
            Socket defaultSocket = serverSocket.accept();
            Thread client = new Thread(clientList,new WebServer(defaultSocket),"Client"+clientsCount);
            client.start();
            System.out.println("Connected a new client, now: " + clientsCount);
        }
    }
}
class WebServer implements Runnable
{
    private Socket userSocket;

    WebServer(Socket socket){
        userSocket = socket;
        WebServerHandler.clientsCount++;
    }

    public void run(){
        try {
            BufferedReader in;
           /* socket = serverSocket.accept();
            System.out.println("Connection Accepted : " + socket);*/
            in = new BufferedReader(new InputStreamReader(userSocket.getInputStream()));/*
            out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);*/
            //DataInputStream inputStream = new DataInputStream(userSocket.getInputStream());
            DataOutputStream outputStream = new DataOutputStream(userSocket.getOutputStream());
            outputStream.writeUTF("Connected successfully! " + userSocket);
            String str;
            do {
                str = in.readLine();
                System.out.println("Echo from " + userSocket + " : " + str);
            } while (!str.equals("stop"));

        } catch (IOException e) { e.printStackTrace();}
        finally {
            try {
                userSocket.close();
            }
            catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

и клиентская часть (в отдельной упаковке)

class TCPClient
{
    public static void main(String...st)
    {
        Socket socket=null;
        try {
            try {
                InetAddress address=InetAddress.getByName("localhost"); //returns 127.0.0.1 (I hope)
                socket = new Socket(address,80);
                System.out.println("Client Connected to Server = "+ socket);
                //BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                System.out.println("Start Typing  :");
                String str;
                boolean flag=true;
                while(flag)
                {
                    str=br.readLine();
                    if(!str.equalsIgnoreCase("END")) {
                        out.println(str);
                    }
                    else {
                        flag=false;
                        out.println("END");
                    }
                }
            } catch(IOException e) { e.printStackTrace(); }
            finally {
                System.out.println("Closing Client Socket.....");
                if(socket!=null)
                    socket.close();
            }

        }
        catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Я использую несколько экземпляров клиентов

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

...