Каким должен быть класс Client этого класса EchoServer? - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь написать класс Client этого EchoServer, чтобы сервер мог отражать мой ввод.Кажется, что EchoServer может только читать входные данные клиента и печатать его, не повторяя его снова.

Вот класс EchoServer.

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class EchoServer implements Runnable {
    Socket socket;

    public EchoServer(Socket socket) {
        this.socket = socket;
    }

    public void run() {
        System.out.printf("connection received from %s\n", socket);
        try {
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            Scanner in = new Scanner(socket.getInputStream());

            while (in.hasNextLine()) {
                String line = in.nextLine();
                System.out.printf("%s says: %s\n", socket, line);
                pw.printf("echo: %s\n", line);
                pw.flush();
            }

            pw.close();
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(4343);
        System.out.printf("socket open, waiting for connections on %s\n",serverSocket);

        while (true) {
            Socket socket = serverSocket.accept();
            EchoServer server = new EchoServer(socket);
            new Thread(server).start();
        }
    }

}

Это мой класс EchoClient, он читает системный ввод и записывает его в сокет.

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class EchoClient {
    Socket socket;
    private Scanner in;
    private PrintWriter out;

    public EchoClient(String address, int port) {
        try {
            socket = new Socket(address, port);
            System.out.println("Connected!");
            in = new Scanner(System.in);
            out = new PrintWriter(socket.getOutputStream());
        } catch (UnknownHostException u) {
            System.out.println(u);
        } catch (IOException e) {
            System.out.println(e);
        }

        String line = "";
        while (!line.equals("over")) {
            line = in.nextLine();
            out.println(line);
        }
        out.close();

    }

    public static void main(String[] args) throws IOException {
        EchoClient c1 = new EchoClient("127.0.1.1", 4343);
        EchoClient c2 = new EchoClient("127.0.1.1", 4343);

    }
}

Кажется, чтоПринтер EchoServer не пишет эхо-операторы.Интересно почему?

...