При создании класса ChatClient сообщения, похоже, не передаются другим локальным пользователям - PullRequest
0 голосов
/ 15 апреля 2020

// Я думаю, что проблема, скорее всего, связана с кодом PrintWriter, но я не уверен,

/ * Я пытаюсь создать класс ChatClient. java. Мне дали файл ChatServer.class. Я могу успешно подключиться к серверу, но отправленные сообщения не могут быть просмотрены другими пользователями. Предполагается, что он сможет работать с локальным соединением между двумя терминалами windows. * /

import java.net.*;
import java.io.*;
import java.util.*;
public class ChatClient {
    private String host;
    private int portNum;
    private String user;
    public ChatClient (String host, int portNum) {
        this.host = host;
        this.portNum = portNum;
    }
    void setUser(String userName) {
        this.user = userName;
    }
    String getUser() {
        return this.user;
    }
    public void execute() {
        try {
            Socket socket = new Socket (host, portNum);
            System.out.println("Connecting to server");
            new ReadThread(socket, this).start();
            new WriteThread(socket, this).start();
            System.out.println("Connected!");
        } catch (UnknownHostException ex) {
            System.out.println("Server not found");
        } catch (IOException e) {
            System.out.println("I/O Error");
        }
    }
    class ReadThread extends Thread {
        private Socket socket;
        private ChatClient client;
        private BufferedReader reader;
        public ReadThread (Socket socket, ChatClient client) {
            this.socket = socket;
            this.client = client;
            try {
                InputStream input = socket.getInputStream();
                reader = new BufferedReader(new InputStreamReader(input));
            } catch (IOException e) {
                System.out.println("Could not get InputStream");
            }
        }
        public void run() {
            while (true) {
                try {
                    String response = reader.readLine();
                    System.out.println("\n" + response);
                    if (client.getUser() != null) {
                        System.out.print("[" + user + "]");
                    }
                } catch (IOException e) {
                    System.out.println("Error reading server data");
                    break;
                }
            }
        }
    }
    class WriteThread extends Thread {
        private Socket socket;
        private ChatClient client;
        private PrintWriter writer;
        public WriteThread (Socket socket, ChatClient client) {
            this.socket = socket;
            this.client = client;
            try {
                OutputStream output = socket.getOutputStream();
                writer = new PrintWriter(output, true);
            } catch (IOException e) {
                System.out.println("Could not get OutputStream");
            }
        }
        public void run() {
            Scanner in = new Scanner(System.in);
            Console console = System.console();
            String userName = console.readLine("Enter name:");
            client.setUser(userName);
            writer.println(user);
            String nameText;
            do {
                nameText = console.readLine("[" + user + "]");
                String s = in.nextLine();
                writer.println(nameText + s);
            } while (!s.equals("bye"));
            try {
                socket.close();
            } catch (IOException e) {
                System.out.println("Error writing server data");
            }
        }
    }
    public static void main(String[] args) {
        if (args.length < 2) {
            return;
        }
        String host = args[0];
        int portNum = Integer.parseInt(args[1]);
        ChatClient client = new ChatClient(host, portNum);
        client.execute();
    }
}
...