// ChatClient.java import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; public class ChatClient { private static final int PORT = 2001; // private static final String DEFAULT_HOST = "basen.oru.se"; private static final String DEFAULT_HOST = "localhost"; private boolean quit = false; private final BufferedReader from_user; private final BufferedReader from_server; private final PrintWriter to_server; private final String user_name; private final ServerListenerThread server_listener; public ChatClient(BufferedReader from_user, BufferedReader from_server, PrintWriter to_server, String user_name) { this.from_user = from_user; this.from_server = from_server; this.to_server = to_server; this.user_name = user_name; this.server_listener = new ServerListenerThread(this, from_server); server_listener.start(); } // ChatClient public void please_quit() { quit = true; } private void run() { System.out.println("Uppkopplad! Loggar in..."); to_server.println("LOGIN " + user_name); System.out.println("Nu kan du chatta! Skriv rader, med ENTER efter varje rad.\n"); while (!quit) { try { String line_from_user = from_user.readLine(); // System.out.println("Från tangentbordet: " + line_from_user); // System.out.println("Till servern: " + line_from_user); to_server.println(line_from_user); if (line_from_user.equals("LOGOUT")) { quit = true; server_listener.please_quit(); } } catch (IOException e) { System.out.println("Kunde inte läsa en rad från användaren."); e.printStackTrace(); quit = true; } } System.out.println("Nedkopplad från servern."); } // run public static void main(String[] args) throws IOException { System.out.println("Välkommen till chatten!"); BufferedReader kbd_reader = new BufferedReader(new InputStreamReader(System.in)); String user_name; do { System.out.print("Skriv ditt namn: "); user_name = kbd_reader.readLine(); } while (user_name.equals("")); InetAddress addr; if (args.length >= 1) addr = InetAddress.getByName(args[0]); else addr = InetAddress.getByName(DEFAULT_HOST); int port; if (args.length >= 2) port = Integer.parseInt(args[1]); else port = PORT; System.out.println("Kopplar upp mot servern..."); Socket socket = new Socket(addr, port); BufferedReader from_server = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter to_server = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); // true: PrintWriter is line buffered ChatClient cc = new ChatClient(kbd_reader, from_server, to_server, user_name); cc.run(); // Use the default execution thread } // main } // class ChatClient